2012-06-26 49 views
2

我的C++編譯器不能理解restrict指令。如何抑制涉及restrict指令的g ++錯誤?

如何抑制這些錯誤?

/usr/include/inttypes.h:271: error: expected ',' or '...' before 'nptr' 

usr/include/inttypes.h包含

extern intmax_t strtoimax(const char * restrict nptr, char ** restrict endptr, int base); 

編譯命令:

g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall 
-W -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 
-DPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -o player.o ../dir/player.cpp 

編輯:

$ g++ --version 
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00) 
+0

這是什麼版本的GCC? Cygwin上的4.5.x和Linux上的4.1.x都沒有給我帶來麻煩...... – DevSolar

+0

在問題中增加了g ++版本信息。我正在使用OS X Lion –

+0

我在裏面看到了'-mmacosx-version-min = 10.5'的小內容......如果內存正常運行,MacOS會安裝一個特殊版本的llvm-gcc,它有一些涉及其自身的技巧。檢查你所調用的編譯器確實是/usr/bin/g++-4.2(或者你的版本是什麼),然後看看你的問題是否存在。 (編輯:呃,這不是你正在使用的「真正的」GCC);-) – DevSolar

回答

3

G ++不支持restrict關鍵字,它是瓦利d在C中,但不是C++。

確實支持__restrict__作爲擴展,所以你可以用-Drestrict=__restrict__編譯使用預處理器把它變成了公認的關鍵字。

有關詳細信息,請參閱http://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html

這個問題似乎是由於您使用了-DISOC99_SOURCE,這似乎與您的操作系統上的C++不兼容,因爲它啓用了在C++中無效的C99功能。在GNU/Linux我建議使用-D_GNU_SOURCE代替,但我懷疑,在Mac OS X

所以不是-Drestrict=__restrict__你可以只是停止使用-D_ISOC99_SOURCE工程 - 爲什麼你甚至需要,對C++?

+0

奇怪......當我嘗試它時,g ++編譯器根本沒有抱怨(請參閱我對OP的評論)。 – DevSolar

+0

@DevSolar,您是否使用過'-D_ISOC99_SOURCE',以便系統標題使用'restrict'關鍵字? –

+0

Ahhhhh ... gotcha。這就是你想的,「我不需要複製所有的命令行cruft來檢查這個」。接得好。 – DevSolar