使用--preprocessed时gcc警告不同

时间:2017-04-07 15:21:07

标签: gcc c-preprocessor warnings

用icecc编译ltrace时遇到编译问题。这是最小的例子:

的main.c

#include <assert.h>

int main(int argc, char **argv) {
    assert(argc != argc);
    return 0;
}

test.sh:

#!/bin/bash
set -x

# one step compilation (no warning)
gcc -Wall main.c

# splitted compilation (warning)
gcc -Wall -E main.c -o main.i
gcc -Wall --preprocessed main.i

输出:

++ gcc -Wall main.c
++ gcc -Wall -E main.c -o main.i
++ gcc -Wall --preprocessed main.i
main.c: In function ‘main’:
main.c:4:10: warning: self-comparison always evaluates to false [-Wtautological-compare]
      assert(argc != argc);
          ^~

正如您所看到的,在一步编译时以及在两个步骤中进行预处理和编译时,结果会有所不同。这是预期的行为吗?

我使用gcc 6.3,这个问题也出现在gcc 6.2 for ARM中。我也不能忽视这一点,因为完整的例子使用-Werror。

0 个答案:

没有答案