美丽心灵土豆:c中条件编译的问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 05:36:22
#define AMD a
main()
{
int a;
scanf("%d",&a);
#if AMD
printf("good");
#else
printf("bad");
#endif
}

我打算根据我的输入决定输出的结果可是,系统说我有错误,希望大家指导.
1.但是书上说的怎么说仅仅是表达式就可以那?
2.一个程序是先运行还是先编译那?

如果改为这样可以吗?
#define a 1
#define AMD a
main()
{
int a;
scanf("%d",&a);
#if AMD
printf("good");
#else
printf("bad");
#endif
}

嘿嘿!你的错误应该是这个constant expression require!

简单一点对你说,#if后面不可以接变量表达式!

因为条件编译就是根据你不同的条件来编译你程序中的不同部分!

所谓条件是指需要在计算机编译时确定的,但你一定有听老师讲过变量表达式

只是在程序执行时充当作用!

如果你将AMD改为常量表达式!程序一定没有错!

先说你的程序怎么改:
最开始的程序 把#if #else #endif 那几个,变成普通的if{ } else{ }就行了。

从第二个问题开始回答。
当然是先编译再运行了。编译的过程中先预编译一遍才开始。

然后解释预编译中是怎么处理#define AMD a 的。
—— 就把代码中所有出现的AMD(字符串等里的不算) 简单替换成a
这样你#if 那里就变成 #if a 所以当然会出错。
应该是普通的if(a) 才对, 所以是if(AMD)
下同。

再回答第一个问题。
当然是表达式就可以了。只是替换而已。替换之后才编译。

要是还不明白请继续问

“条件编译”,顾名思义是根据条件不同来编译程序不同部分,因此,#if后面的值必须是常量表达式,这样才能在编译时就确定编译代码的哪些部分,如果你用了变量表达式,变量表达式的值只能在程序运行时确定,编译时无法确定,编译器无法知道该编译哪个部分的代码。