我正在参加 C 的课程并遇到了这个#define。阅读它,是你定义的东西。例如:
#define FAMILY 4
然后,每次我设置与家人相同的东西或致电家庭时,价值为4。 但我也遇到过这个问题:
#define EVER ;;
#define FAMILY 4
如果有两个分号后是什么意思?这是否意味着EVER =“;;”?
答案 0 :(得分:10)
EVER将完全相同:
;;
这意味着您可以:
#define EVER ;;
//.....
for(EVER){printf("This will print forever");}
这相当于:
for(;;){printf("This will print forever");}
但是,在为这样的结构使用别名时应该谨慎行事,因为你的应用程序变得越来越大,如果你弄乱一些#define语句,你可能会变得奇怪而且难以调试问题。
在我看来,从长远来看,经典的while(true)
可能更健康,但不那么诙谐。
答案 1 :(得分:5)
预处理器是在实际编译器运行之前运行的步骤。预处理器在源代码中对宏进行简单的搜索替换,并将其传递给编译器。
例如,使用问题中定义的EVER
宏,您可以将其用作
for (EVER) { ... }
并且预处理器将简单地将其转换为
for (;;) { ... }
编译器将看到。
答案 2 :(得分:5)
替换无限循环是一种有趣的方式
for(;;) { ... }
与
for(EVER) { ... }
为了弄清楚它是一个无限循环。
另一种选择是做
#define forever while (1)
所以我们可以做到
forever { ... }
甚至
do { ... } forever