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