这个定义意味着什么?

时间:2014-01-08 11:41:06

标签: c c-preprocessor

我正在参加 C 的课程并遇到了这个#define。阅读它,是你定义的东西。例如:

#define FAMILY 4

然后,每次我设置与家人相同的东西或致电家庭时,价值为4。 但我也遇到过这个问题:

#define EVER ;;
#define FAMILY 4

如果有两个分号后是什么意思?这是否意味着EVER =“;;”?

3 个答案:

答案 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