我正在参加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)从长远来看,经典可能会更健康,但不是那么诙谐.
预处理器是在实际编译器运行之前运行的步骤.预处理器在源代码中对宏进行简单的搜索替换,并将其传递给编译器.
例如,使用EVER问题中定义的宏,您可以将其用作
for (EVER) { ... }
Run Code Online (Sandbox Code Playgroud)
并且预处理器将简单地将其转换为
for (;;) { ... }
Run Code Online (Sandbox Code Playgroud)
编译器将看到.
这是一个有趣的方式来取代无限循环
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)
| 归档时间: |
|
| 查看次数: |
727 次 |
| 最近记录: |