【问题标题】:Why a segfault on #define? [closed]为什么#define 出现段错误? [关闭]
【发布时间】:2014-08-30 05:03:42
【问题描述】:

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

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

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

if 为假时的程序段错误...

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

【问题讨论】:

  • 添加语言标签。
  • 请提供SSCCE
  • 为什么要关闭和拒绝投票?这可能是一个简单的误解,但这是一个合理的问题,从三行中可以明显看出这个误解是什么,不是吗?

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


【解决方案1】:

#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 所做的操作。

【讨论】:

  • Solution: use a boolean variable, not a macro. -> 什么意思?
  • @FinalContest:我假设宏用于有条件地使用#ifdef 编译某些东西。如果是这种情况,并且条件取决于运行时条件,那么合适的工具是布尔变量,而不是宏。
  • 如果没有 SSCCE 就很难判断该问题。
  • 我知道#define 是一个预编译器指令,我理解段错误,但为什么同样的代码在我的另一个类中运行没有问题,如果我的环境变量被更改,程序接受修改.. 我指定代码没有被重新编译...
  • @user3819278:您在问为什么后面的代码(您显示的代码)会崩溃。这我说不准,甚至可能与复制的代码完全无关!
猜你喜欢
  • 2021-10-14
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 2020-11-04
  • 2021-01-11
  • 1970-01-01
相关资源
最近更新 更多