0
我想基于边界C++ #elif指令被丢弃
template<class B>
struct IntDecl {
enum {
L = B::_l, U = B::_u
};
#if (L >=0 && U <=255)
typedef char Type;
#elif (L>=0&&U<=65535)
typedef unsigned int Type;
#endif
};
所以创建一个类型声明,因为你在这里看到的取决于L
和U
的类型将被定义的值。 例如
IntDecl< BOUND < 0, 65535 > >::Type i; // this should be a unsigned int
IntDecl< BOUND < 0, 255 > >::Type i1; // this should be a char
的问题是,无论是(i
和i1
)被认为chars
,在#elif
被丢弃换句话说。任何帮助?为什么#elif
没有执行?
你误会了。预处理器在编译器之前运行,只是进行文本替换。 – chris 2013-05-13 23:45:29
最好不要使用以下划线开头的名称;它们基本上被保留用于'执行'。如果U大于65535(如果使用C预处理器的构造完全可以工作),则最终会出现问题。你应该有一个'#else'子句,以便覆盖其他情况(并且它可能包含一个'#error'指令,以防止代码编译的信息比根本没有定义'Type'的信息更好) 。 – 2013-05-14 00:10:14
@JonathanLeffler是的,我同意,但基本不工作 – 2013-05-14 01:49:54