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