RRR*_*RRR 0 c++ macros preprocessor
void testFunc();
int myval = 0;
int main()
{
int a = 1;
if (a > 0)
{
#define TEST1
testFunc();
#undef TEST1
}
int b = 2;
if ( b > 0)
{
#define TEST2
testFunc();
#undef TEST2
}
std::cout << "val : " << myval << endl;
getchar();
return 0;
}
void testFunc()
{
#ifdef TEST1
#define HERE 1
#endif
#ifdef TEST2
#define HERE 2
#endif
#ifdef HERE
myval = HERE;
#else
myval = -1;
#endif
}
Run Code Online (Sandbox Code Playgroud)
如何在第一次调用 testFunc() 时将 HERE 的值打印为 1,然后在第二次调用时将 HERE 的值打印为 2。
使用我拥有的当前代码,正在打印的值是 -1。
您缺少的是预处理器指令在编译时间之前进行评估。
这意味着当预处理器解析您的代码时:
这意味着testFunc变成:
void testFunc() {
myval = -1;
}
Run Code Online (Sandbox Code Playgroud)
然后,在此预处理之后,您的代码将被编译。
我会考虑使用预处理器以外的其他东西来完成您想要实现的目标。
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |