我的问题是,预处理命令是不能跨源文件(.cpp)吗?
如下:
//main.cpp
#include <iostream>
using namespace std;#define _defualt
#include "defualt.h"int main()
{
f();
cout<<b<<endl;
return 1;
}//defualt.h
void f();
int b;//defualt.cppvoid f()
{
#ifdef _defualt
b = 10;
#endif
}
结果显示b = 0。我的本意是如果在main.cpp中定义了宏 _defualt
那么在defualt.cpp中的代码将使b = 10。

解决方案 »

  1.   

    b变成局部变量了吧,把b定义在cpp文件看看
      

  2.   

    把#define _defualt放到h文件
      

  3.   

    当然不可能。预处理过程是每个.cpp独立进行的。这些代码只有连接时才会连到一起。
    一般的方法是,在编译器的参数里传入这个编译变量。比如VC是/D _defualt。可以在工程设置里的预编译设置里加入这个编译宏。
    这样就是在编译所有文件时都已经是定义的了。
    另外默认这个单词是:default