我有一段这样的代码:
/* T matrix */
#define T11 0
#define T12_re 1
#define T12_im 2
int main(int argc, char *argv[])
{
return 1;
}
我的问题是为什么它使用预处理程序指令来定义全局变量,而不是简单地使用这样的代码:
/* T matrix */
double T11 = 0;
double T12_re = 1;
double T12_im = 2;
int main(int argc, char *argv[])
{
return 1;
}
最佳答案 预处理程序符号不是变量.在您的第一个代码中,T13_im(etc …)不是变量(而是一个预处理的名称,在解析时扩展为4)
在你的第二个代码中(它不会像你编写的那样编译),你可能会有
const double T12_re= 1.0;
然后你声明了一个const double类型的变量T12_re.
阅读C preprocessor上的wikipage,GNU cpp的文档,并意识到编译器只看到预处理的形式;对于您的文件yoursource.cc,您可以使用命令g -Wall -C -E yoursource.cc>获得预处理的形式yoursource.ii. yoursource.ii然后使用寻呼机或编辑器浏览生成的yoursource.ii
有时,预处理器允许像this这样的可爱技巧.而且你不能总是使用变量.例如,case表达式应该是一个编译时常量,并且不能在C中作为const int变量. (你可以使用一些枚举,它在C和C中是不同的).