1
xieyudi1990 2015-03-31 12:11:38 +08:00 2
gcc manpage:
-D name Predefine name as a macro, with definition 1. |
2
wind3110991 OP 那。。问题是相当于print两个变量最后只会输出一个?
|
3
bcxx 2015-03-31 12:41:18 +08:00
@wind3110991 你可以 expand 一下预处理后的代码来理解
|
4
0Shaka 2015-03-31 12:52:05 +08:00
问题是, 为什么答案里没有 01 这个选项...
|
5
zongwan 2015-03-31 13:41:31 +08:00 1
答案是 网页程序录入的
01 自动转 1 ? |
7
kkhaike 2015-03-31 13:46:22 +08:00
楼上正解
|
8
maron2014 2015-03-31 14:12:11 +08:00
经测试,输出就是01
|
9
zwzmzd 2015-03-31 16:11:27 +08:00
当时我看见的备选是
A.0 B.1 C.10 D.11 然后我把选项脑补成了 A.00 B.01 C.10 D.11 最后选了B |
10
wind3110991 OP 有没有人从原理上解释下。。。
|
11
bugeye 2015-04-08 11:36:55 +08:00
就是ifdef的应用啊,你用gcc 传了aa进去。
遇到第一个ifdef,因为没有定义bb,所以是else b=1. 第二个ifdef,因为定义了aa,所以a=0。 输出应该是01.出题目的搞错了。。。。出题目的估计想当然认为01=1.但输出格式明明是两个%d。 你还可以试试 gcc -Daa -Dbb .... 这样结果是00 不加 任何-D,结果是11 |
12
bugeye 2015-04-08 11:44:16 +08:00 1
ifdef是预编译语句。就是在真正编译前先根据“环境变量”处理代码。
如果用了 gcc -Daa 真正到编译器的代码就成了 #include<stdio.h> int a; int b; b=1; a=0; 。。。。 这种写法本身有问题,有些编译器应该会报错。 应该写成 #ifdef aa int a=0; #else int a=1; #endif |