【发布时间】:2014-01-02 06:41:42
【问题描述】:
我最近将我的 GCC (MinGW) 升级到了 4.8.1 版,但遇到了 -D 选项的问题。例如下面的 main.c 代码
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
#ifdef TEST
printf("We are in testing mode!\n");
#endif // TEST
return 0;
}
打印
世界你好
当我输入时:
gcc -DTEST main.c -o main.exe
但以下两个工作:
gcc -DTEST= main.c -o main.exe
gcc -DTEST=1 main.c -o main.exe
我以前的 GCC 版本(我相信是 4.6)没有这个问题。这是一个错误吗?
以下是gcc -v -DTEST -E -dM -c main.c 的已编辑输出转储。注意#define test 1。
...
#define STDOUT_FILENO 1
#define test 1
#define _PID_T_
#define __LDBL_MIN_EXP__ (-16381)
...
Using built-in specs.
COLLECT_GCC=c:\MinGW\bin\gcc.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32 --build=m
ingw32 --without-pic --enable-shared --enable-static --with-gnu-ld --enable-lto
--enable-libssp --disable-multilib --enable-languages=c,c++,fortran,objc,obj-c++
,ada --disable-sjlj-exceptions --with-dwarf2 --disable-win32-registry --enable-l
ibstdcxx-debug --enable-version-specific-runtime-libs --with-gmp=/usr/src/pkg/gm
p-5.1.2-1-mingw32-src/bld --with-mpc=/usr/src/pkg/mpc-1.0.1-1-mingw32-src/bld --
with-mpfr= --with-system-zlib --with-gnu-as --enable-decimal-float=yes --enable-
libgomp --enable-threads --with-libiconv-prefix=/mingw32 --with-libintl-prefix=/
mingw --disable-bootstrap LDFLAGS=-s CFLAGS=-D_USE_32BIT_TIME_T
Thread model: win32
gcc version 4.8.1 (GCC)
COLLECT_GCC_OPTIONS='-v' '-D' 'TEST' '-E' '-dM' '-c' '-mtune=generic' '-march=pe
ntiumpro'
c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/cc1.exe -E -quiet -v -iprefix c:\ming
w\bin\../lib/gcc/mingw32/4.8.1/ -D TEST main.c -mtune=generic -march=pentiumpro
-dM
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/inclu
de"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/../..
/../../include"
ignoring nonexistent directory "/mingw/include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/inclu
de-fixed"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/../..
/../../mingw32/include"
ignoring nonexistent directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
c:\mingw\bin\../lib/gcc/mingw32/4.8.1/include
c:\mingw\bin\../lib/gcc/mingw32/4.8.1/../../../../include
c:\mingw\bin\../lib/gcc/mingw32/4.8.1/include-fixed
c:\mingw\bin\../lib/gcc/mingw32/4.8.1/../../../../mingw32/include
End of search list.
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/;c:/mingw/bin/../libexec
/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/4.8.1/;c:/mingw/bin/../lib/gcc/;c:/
mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/;c:/mingw/bin/../lib/
gcc/mingw32/4.8.1/../../../
COLLECT_GCC_OPTIONS='-v' '-D' 'TEST' '-E' '-dM' '-c' '-mtune=generic' '-march=pe
ntiumpro'
【问题讨论】:
-
我没有看到您在安装 GCC 4.8.1 的 MinGW 时描述的问题。请将
gcc -v -DTEST -E -dM -c main.c的输出发布到您的问题中。 -
我发现了问题;感谢您的建议。显然我的 GCC 确实注入了
#define,但它是小写字母。这就是我的编译不起作用的原因。如果我使用-DTEST=,那么它是大写的。我仍然认为我的 GCC 版本有错误。输出很长。如何发布? -
注意:我通过MinGW安装了GCC。
-
这很奇怪。 GCC 清楚地看到全大写
TEST(它显示在COLLECT_GCC_OPTIONS输出中) - 我不知道是什么导致它在预处理器中将其小写。我从nuwen.net/mingw.html 得到了我的 MinGW。如果他们知道发生了什么,您可能想问一下提供您正在使用的 MinGW 的人。在这一点上,我倾向于您构建中的错误,而不是您的环境中的错误,这是我之前的猜测。 -
我想知道这是否会发生在另一个名字上?试试看:
gcc -DFOOBAR -E -dM -c main.c | grep -i foobarFOOBAR会变成小写吗?