如何抑制涉及restrict指令的g ++错误?

时间:2012-06-26 09:32:48

标签: c++

我的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)

1 个答案:

答案 0 :(得分:3)

G ++不支持restrict关键字,该关键字在C中有效,但在C ++中无效。

支持__restrict__作为扩展,因此您可以使用-Drestrict=__restrict__进行编译,以使用预处理器将其转换为可接受的关键字。

有关详细信息,请参阅http://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html

这个问题似乎是由于你在操作系统上使用{C}似乎与C ++不兼容的-DISOC99_SOURCE引起的,因为它启用了在C ++中无效的C99功能。在GNU / Linux上,我建议使用-D_GNU_SOURCE,但我怀疑它适用于Mac OS X.

所以代替-Drestrict=__restrict__你可以停止使用-D_ISOC99_SOURCE - 为什么你甚至需要C ++?