为何在#define上发生段错误?

时间:2014-07-09 08:48:32

标签: c++ qt segmentation-fault c-preprocessor

我不明白为什么我的程序在#define之后会出现段错误:

if(QProcess::systemEnvironment().filter("toto").size() == 1 ) if(!QProcess::systemEnvironment().filter("toto").at(0).contains("13")) #define tata

我在另一个班级使用这个代码,他像老板一样跑:P

当if为false时,程序会出现段错误

我知道#define是一个预编译器指令,我理解了段错误,但为什么这个相同的代码在我的另一个类中运行没有问题,如果我的环境变量被更改,程序接受修改..我指定代码有没有重新编译..

1 个答案:

答案 0 :(得分:2)

#define是一个预编译器指令,它由编译器解析和使用,而不是在运行时。所以它不遵守你的if条件。因此,你的if实际上正在调整执行此代码之后的任何内容......无论它是什么。

解决方案:使用布尔变量,而不是宏。

bool tata = false;
if(QProcess::systemEnvironment().filter("toto").size() == 1 )
    if(!QProcess::systemEnvironment().filter("toto").at(0).contains("13"))
        tata = true;

但详细信息将取决于您首先使用tata进行的操作。