我只使用特定于 C++ 的头文件(例如<cstdlib>
),但是我仍然得到全局声明的函数,而不仅仅是std
命名空间中的函数。有没有办法(也许是编译器开关)来防止这种情况?
例如,下面的代码:
#include <cstdlib>
float random() { return 0.0f; }
int main() { return 0; }
linux下编译失败,报如下错误:
> g++ -c main.cpp main.o
main.cpp: In function ‘float random()’:
main.cpp:2:14: error: new declaration ‘float random()’
/usr/include/stdlib.h:327:17: error: ambiguates old declaration ‘long int random()’
或者
> clang++ main.cpp -o main.o
main.cpp:2:7: error: functions that differ only in their return type cannot be overloaded
float random() { return 0.0f; }
/usr/include/stdlib.h:327:17: note: previous declaration is here
extern long int random (void) __THROW;
这是因为它自己的功能stdlib.h
“污染”了全局命名空间。random
请注意,在 Windows 上使用 Visual Studio 进行编译时,我不会遇到这些问题。