簡體   English   中英

GCC 4.8.1(MingGW)-D選項無法正常工作

[英]GCC 4.8.1 (MingGW) -D option does not work as usual

我最近將我的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'

我確認最新的MinGW上的錯誤:

對於MinGW(當前存儲庫版本)隨附的GCC 4.8.1,使用-DDEBUG定義小寫調試符號。

這是我的簡化測試用例:

文件“ toto.cpp”:

int debug = 1;

命令行:

$ g++ -c -DDEBUG toto.cpp
<command-line>:0:7: error: expected unqualified-id before numeric constant
toto.cpp:1:5: note: in expansion of macro 'debug'
 int debug = 1;
     ^

預處理文件中有一個小寫的“ DEBUG”,顯然是假的:

$ g++ -E -dMID -pipe -DDEBUG toto.cpp
[snip]
#define __WINNT__ 1
# 1 "toto.cpp"
#define WINNT 1
# 1 "toto.cpp"
#define _INTEGRAL_MAX_BITS 64
# 1 "toto.cpp"
#define __declspec(x) __attribute__((x))
# 1 "toto.cpp"
#define __DECIMAL_BID_FORMAT__ 1
# 1 "<command-line>"
#define debug 1
# 1 "toto.cpp"
int 1 = 1;

是的,這個版本的GCC的主要問題是...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM