这个定义意味着什么?

Mar*_*all 3 c c-preprocessor

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

#define FAMILY 4
Run Code Online (Sandbox Code Playgroud)

然后,每当我设置与家人相同的东西或致电家庭时,它就是价值4.但我也遇到过这样的情况:

#define EVER ;;
#define FAMILY 4
Run Code Online (Sandbox Code Playgroud)

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

nes*_*oop 10

EVER将完全等同于:

;;
Run Code Online (Sandbox Code Playgroud)

这意味着您可以:

#define EVER ;;

//..... 

for(EVER){printf("This will print forever");}
Run Code Online (Sandbox Code Playgroud)

这相当于:

for(;;){printf("This will print forever");}
Run Code Online (Sandbox Code Playgroud)

但是,在为这样的结构使用别名时应该谨慎,因为你的应用程序变得越来越大,如果你弄乱一些#define语句,你可能会变得很奇怪并且难以调试问题.

在我看来,while(true)从长远来看,经典可能会更健康,但不是那么诙谐.


Som*_*ude 5

预处理器是在实际编译器运行之前运行的步骤.预处理器在源代码中对宏进行简单的搜索替换,并将其传递给编译器.

例如,使用EVER问题中定义的宏,您可以将其用作

for (EVER) { ... }
Run Code Online (Sandbox Code Playgroud)

并且预处理器将简单地将其转换为

for (;;) { ... }
Run Code Online (Sandbox Code Playgroud)

编译器将看到.


glg*_*lgl 5

这是一个有趣的方式来取代无限循环

for(;;) { ... }
Run Code Online (Sandbox Code Playgroud)

for(EVER) { ... }
Run Code Online (Sandbox Code Playgroud)

为了弄清楚它是一个无限循环.

另一种选择是做

#define forever while (1)
Run Code Online (Sandbox Code Playgroud)

所以我们可以做到

forever { ... }
Run Code Online (Sandbox Code Playgroud)

甚至

do { ... } forever
Run Code Online (Sandbox Code Playgroud)