为什么在#define上出现段错误

Why a segfault on #define?

本文关键字:错误 段错误 #define 为什么      更新时间:2023-10-16

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

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

我在另一堂课上使用这个代码,他跑得像个老板:p

if为false时程序段错误…

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

#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做什么