用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。