【发布时间】:2013-07-31 07:42:22
【问题描述】:
在我的代码中我有一个宏:
#define TPS 1(or 0)
int main()
{
....
if(var)
{
#ifdef TPS
do something
#endif
}
}
但现在,我想将 if(var) 与宏合并,以便实现:
int var=1;
#define TPS (if(var))
int main()
{
int a, b, c;
a=1;b=2;c=3;
#if TPS
printf("a: %d\n", a);
printf("b: %d\n", b);
printf("c: %d\n", c);
#endif
printf("++a: %d\n", ++a);
return 0;
}
即只有当var=1 时,宏条件中的代码块才应该存在
例如,对于 var=1:
int main()
{
int a, b, c;
a=1;b=2;c=3;
printf("a: %d\n", a);
printf("b: %d\n", b);
printf("c: %d\n", c);
printf("++a: %d\n", ++a);
return 0;
}
并且,对于 var=0:
int main()
{
int a, b, c;
a=1;b=2;c=3;
printf("++a: %d\n", ++a);
return 0;
}
如何实现#define TPS 来实现这一点?
【问题讨论】:
-
您究竟想在编译时和运行时实现什么?你的问题不是很清楚,让我觉得你不太了解其中的区别。
-
请注意,
var仅在运行时具有值。对于编译器,它只是某个包含int的静态位置的名称。在编译期间,var没有任何价值,它只有在运行时才有价值! -
@BasileStarynkevitch,我明白了,我更新了这个问题,我希望它现在更有意义。我希望预处理器用代码中的某些条件替换
TPS,这些条件可以覆盖整个#if #endif块 -
我相信你不太了解 C 编译器(及其预处理)是如何工作的。
-
为什么要问你?你有什么真正的代码?请详细说明您想要实现什么,以及在编译时和运行时应该发生什么。
标签: c macros c-preprocessor