C++ ANSI ISO IEC 14882 2003 Allegato C.1 (Pagina 668):lvalue-to-rvalue conversione di un array in C ISO
Modifica: Il risultato di un'espressione condizionale, un'espressione di assegnazione, o una virgola espressione may bean lvalue
Razionale: C + + è un linguaggio orientato agli oggetti, che pone un'enfasi relativamente maggiore sugli lvalue. Ad esempio, le funzioni possono restituire lvalue.
Effetto sulla funzione originale: passa alla semantica di una funzione ben definita. Alcune espressioni C che implicitamente fanno affidamento sulle conversioni da lvalue a rvalue produrranno risultati diversi. Ad esempio,
char arr[100];
sizeof(0, arr)
cede 100 in C + + e sizeof(char*)
in C.
...
stavo leggendo questo proprio oggi e mi sono ricordato che un paio di mesi un andare un mio amico ha proposto un problema per scrivere una funzione che restituirebbe 0 se fosse compilato con C++ e 1 se fosse compilato con C. L'ho risolto sfruttando il fatto che in C una struct era nello scope esterno. Quindi, considerando questa nuova informazione, ho deciso che questa sarebbe stata un'altra soluzione al problema precedente, che ho provato su Microsoft Visual Studio 2008, ma indipendentemente dal fatto che sia compilato come codice C o C++ sizeof(0, arr)
restituisce sempre 4. Quindi 2 domande:
1. Cos'è ISO C? È lo standard C attuale? È l'unico (sento che C è in rapida evoluzione) 2. Si tratta di un bug microsoft C++?
TIA
Edit: Scusa ottenuto mescolato con l'uscita ed averla modificata:
Con MSVC 2010, 'sizeof (0, arr)' sembra valutare a '4' (quando compilato come C++). Con g ++, valuta a '100'. –