Sto utilizzando solo i file di intestazione specifici per C++ (ad esempio <cstdlib>
), tuttavia ottengo comunque funzioni dichiarate globalmente e non solo funzioni nello spazio dei nomi std
. C'è un modo, forse un interruttore del compilatore, per impedirlo?Impedire funzioni standard al di fuori dello spazio dei nomi std
Ad esempio, il codice seguente:
#include <cstdlib>
float random() { return 0.0f; }
int main() { return 0; }
FAIL compilare sotto Linux, con il seguente errore:
> 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()’
o
> 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;
che è causato che stdlib.h
" inquina "il namespace globale con la sua funzione random
.
Nota che non sto affrontando questi problemi durante la compilazione su Windows, utilizzando Visual Studio.
Si noti che 'random' è ** non ** parte della libreria standard C. Questo non vuol dire che il problema non sia reale. –
@PeteBecker Infatti, viene [da POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/random.html). Rende le cose anche degne di valore, non si deve solo prestare attenzione ai nomi standard C, ma anche a tutti gli oggetti POSIX. :( –