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

How to suppress g++ errors involving restrict directive?

本文关键字:指令 g++ 错误 何抑制      更新时间:2023-10-16

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

G++ 不支持 restrict 关键字,该关键字在 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++?