Nel compilatore gcc, sizeof(main)
, sizeof(printf)
e sizeof(scanf)
sono tutti 1. Voglio sapere come sono le dimensioni di tutti questi 1. Qual è la logica dietro di esso?Qual'è la dimensione di (main), sizeof (printf), sizeof (scanf)?
risposta
Perché il C (99) standard richiede (§ 6.5.3.4/1)
L'operatore
sizeof
non si applicano ad un'espressione che ha tipo di funzione o un tipo incompleto, al nome tra parentesi di un tale tipo, o ad un'espressione che designa un membro bit-field.
quindi il valore restituito è privo di significato. Se avete bisogno di sizeof
il puntatore a funzione, utilizzare
sizeof(&main)
sizeof(&printf)
sizeof(&scanf)
rendimenti gcc 1 su tipi che il sizeof è priva di senso (vedi c-common.c):
4187 if (type_code == FUNCTION_TYPE)
4188 {
4189 if (is_sizeof)
4190 {
4191 if (complain && (pedantic || warn_pointer_arith))
4192 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4193 "invalid application of %<sizeof%> to a function type");
4194 else if (!complain)
4195 return error_mark_node;
4196 value = size_one_node;
4197 }
4198 else
4199 value = size_int (FUNCTION_BOUNDARY/BITS_PER_UNIT);
4200 }
4201 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4202 {
4203 if (type_code == VOID_TYPE
4204 && complain && (pedantic || warn_pointer_arith))
4205 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4206 "invalid application of %qs to a void type", op_name);
4207 else if (!complain)
4208 return error_mark_node;
4209 value = size_one_node;
4210 }
Quindi applicare sizeof a un tipo di funzione non è definito/comportamento non specificato? – codymanix
thnx KennyTM ... Ma voglio sapere come restituisce il compilatore gcc 1 ?? – Parikshita
@Parixit: perché hai fatto qualcosa che non ha senso, quindi ottieni un risultato che non ha senso. Immondizia, spazzatura. È un comportamento indefinito, e il compilatore può fare tutto ciò che vuole, inclusa la formattazione del disco rigido o l'accensione dei capelli. Ma ha scelto di fare qualcosa di un po 'meno drammatico, e ha appena restituito 1 – jalf
Avrei pensato che fosse la dimensione di un puntatore a funzionare. Una realtà che mi sorprende ...
Questo dovrebbe essere un commento, non è davvero una risposta. –
invece di invitare questo commento, la gente dovrebbe invece preferire la "risposta". – codymanix
Cosa c'è di sbagliato nei commenti? Trovo che una delle cose più utili di sempre stia discutendo, con altri sviluppatori, su cosa hanno pensato. Eliminare ciò è, IMHO, grossolana follia. –
- 1. La dimensione di (enum) == sizeof (int), sempre?
- 2. Semplice printf con sizeof non funziona affatto
- 3. Trovare la dimensione di una stringa in argv usando sizeof
- 4. Perché sizeof (param_array) è la dimensione del puntatore?
- 5. Sizeof vs STRLEN
- 6. Ho la garanzia che sizeof (type) == sizeof (tipo senza segno)?
- 7. Perché sizeof (int) è diverso da sizeof (int *)?
- 8. operatore sizeof() in C
- 9. comportamento dell'operatore sizeof in C
- 10. sizeof() mostra output diverso
- 11. sizeof comportarsi in modo imprevisto
- 12. Come funziona sizeof (array)
- 13. Come funzionano sizeof (arr)/sizeof (arr [0])? persone
- 14. C# sizeof decimal?
- 15. sizeof modello variadic (somma di sizeof di tutti gli elementi)
- 16. Come sizeof (array) funziona in fase di runtime?
- 17. sizeof() std :: vector (C++)
- 18. Utilizzando sizeof() sulla memoria malloc'd
- 19. sizeof non mostra l'output previsto
- 20. C++ sizeof Vector è 24?
- 21. Sizeof classe vuota
- 22. stringa Sizeof letterale
- 23. sizeof (2147483648) è 8 byte mentre sizeof (2147483647 + 1) è 4 byte
- 24. include le modifiche sizeof in_addr nella struttura
- 25. c lingua se dichiarazione con sizeof
- 26. Come capire "C++ consente sizeof (char *)! = Sizeof (int *)"?
- 27. perché sizeof ('a') è 4 in C?
- 28. Swift: come usare sizeof?
- 29. confusione circa operatore sizeof in C
- 30. perché sizeof ("- 2147483648") - 1
Duplicate: [cosa sizeof (nome della funzione) return?] (http://stackoverflow.com/questions/2666392/what-does-sizeof-function-name-return) –