先说你的程序怎么改:
最开始的程序 把#if #else #endif 那几个,变成普通的if{ } else{ }就行了。
从第二个问题开始回答。
当然是先编译再运行了。编译的过程中先预编译一遍才开始。
然后解释预编译中是怎么处理#define AMD a 的。
—— 就把代码中所有出现的AMD(字符串等里的不算) 简单替换成a
这样你#if 那里就变成 #if a 所以当然会出错。
应该是普通的if(a) 才对, 所以是if(AMD)
下同。
再回答第一个问题。
当然是表达式就可以了。只是替换而已。替换之后才编译。
要是还不明白请继续问
嘿嘿!你的错误应该是这个constant expression require!
简单一点对你说,#if后面不可以接变量表达式!
因为条件编译就是根据你不同的条件来编译你程序中的不同部分!
所谓条件是指需要在计算机编译时确定的,但你一定有听老师讲过变量表达式
只是在程序执行时充当作用!
如果你将AMD改为常量表达式!程序一定没有错!
“条件编译”,顾名思义是根据条件不同来编译程序不同部分,因此,#if后面的值必须是常量表达式,这样才能在编译时就确定编译代码的哪些部分,如果你用了变量表达式,变量表达式的值只能在程序运行时确定,编译时无法确定,编译器无法知道该编译哪个部分的代码。