Я использую только файлы заголовков, специфичные для С++ (например, <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.