2

私の C++ コンパイラはrestrictディレクティブを理解できません。

これらのエラーを抑制するにはどうすればよいですか?

/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)
4

1 に答える 1

2

G++ はrestrict、C では有効ですが C++ では無効なキーワードをサポートしていません。

拡張機能としてサポートされているため、プリプロセッサを使用してコンパイルして、受け入れられたキーワードに変換できます。__restrict__-Drestrict=__restrict__

詳細については、http: //gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.htmlを参照してください。

この問題は-DISOC99_SOURCE、C++ では無効な C99 機能が有効になるため、OS の C++ と互換性がないように見える を使用したことが原因のようです。GNU/Linux-D_GNU_SOURCEでは、代わりに使用することをお勧めしますが、Mac OS X では機能するとは思えません。

代わりに、-Drestrict=__restrict__使用をやめることができます-D_ISOC99_SOURCE-なぜC ++でそれが必要なのですか?

于 2012-06-26T12:15:28.913 に答える