GDI*_*der 8 c types c-preprocessor
我的部分代码取决于预处理器符号的值:
int a()
{
#if SDK_VERSION >= 3
return 1;
#else
return 2;
#endif
}
Run Code Online (Sandbox Code Playgroud)
比较取决于SDK_VERSION的值.它应该是一个整数或比较整数的东西,在本例中为3.如果SDK_VERSION是无法与整数比较的东西,则会出现编译错误.
如果SDK_VERSION不是预期的类型,有没有办法中止编译?例如:
#if type(SDK_VERSION) != int # Does not compile, I know
#error "SDK_VERSION must be an integer."
#endif
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 13
使用模板生成此类错误:
template<typename T> struct macro_error;
template<> struct macro_error<int> {};
template<typename T> void check(T)
{
macro_error<T> SDK_VERSION_must_be_int;
}
int ignored = (check(SDK_VERSION), 0);
Run Code Online (Sandbox Code Playgroud)
如果SDK_VERSION
不是int ,此代码将生成编译错误,其中包含以下字符串:
SDK_VERSION_must_be_int
Run Code Online (Sandbox Code Playgroud)
看这些演示:
#define SDK_VERSION 1.0
)#define SDK_VERSION 1
)并且还注意到第一种情况下的错误消息.它打印这个:
prog.cpp:9: error: ‘SDK_VERSION_must_be_int’ has incomplete type
prog.cpp:9: warning: unused variable ‘SDK_VERSION_must_be_int’
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2339 次 |
最近记录: |