Dans le compilateur gcc, sizeof(main)
, sizeof(printf)
et sizeof(scanf)
sont tous 1. Je veux savoir comment sont les tailles de toutes ces 1. Quelle est la logique derrière cela?Quelle est la taille de (principal), sizeof (printf), sizeof (scanf)?
Répondre
Parce que la norme C (99) nécessite (§ 6.5.3.4/1)
L'opérateur
sizeof
ne doit pas être appliqué à une expression qui a le type de fonction ou un type incomplet, au nom parenthésé d'un tel type, ou à une expression désignant un membre de champ de bits.
donc la valeur de retour est sans signification. Si vous avez besoin du sizeof
le pointeur de fonction, utilisez
sizeof(&main)
sizeof(&printf)
sizeof(&scanf)
retours gcc 1 sur les types que le sizeof est vide de sens (voir 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 }
L'application de sizeof à un type de fonction est donc un comportement indéfini/non spécifié? – codymanix
thnx KennyTM ... Mais je veux savoir comment le compilateur gcc renvoie 1 ?? – Parikshita
@Parixit: Parce que vous avez fait quelque chose qui n'a aucun sens, vous obtenez un résultat qui n'a aucun sens. Garbage in, garbage out. C'est un comportement indéfini, et le compilateur pourrait faire tout ce qu'il veut, y compris le formatage de votre disque dur ou mettre le feu à vos cheveux. Mais il a choisi de faire quelque chose d'un peu moins dramatique, et juste retourné 1 – jalf
J'aurais pensé que c'était la taille d'un pointeur pour fonctionner. On me surprend en fait ...
Cela devrait être un commentaire, ce n'est pas vraiment une réponse. –
au lieu d'upvoting ce commentaire, vous les gens devraient downvote la "réponse" à la place. – codymanix
Qu'est-ce qui ne va pas avec les commentaires? Je trouve que l'une des choses les plus utiles jamais discutées, avec d'autres développeurs, ce qu'ils pensaient. Éliminant c'est, à mon humble avis, la folie brute. –
- 1. Taille du tampon: N * sizeof (type) ou sizeof (var)? C++
- 2. Comment sizeof calcule la taille des structures
- 3. C++ sizeof (...)
- 4. Quelle est la différence entre sizeof (int) et sizeof (int *)? Est-ce que cette instruction est int * numbers [] = {....} correct?
- 5. sizeof java object
- 6. C# sizeof decimal?
- 7. sizeof un membre struct
- 8. Que fait sizeof?
- 9. Sizeof rapports incorrect Taille de la structure définie type -
- 10. sizeof dérivé déjà de base
- 11. Que fait sizeof (char *)?
- 12. évaluation de l'opérande dans l'opérateur sizeof
- 13. opérateur sizeof dans c
- 14. spécialisation de gabarit selon sizeof type
- 15. Sizeof ne retourne pas la taille réelle de la variable dans C
- 16. Comment calculer la taille de la classe dans java ..? Est une méthode comme sizeof() dans c ..?
- 17. C# pourquoi sizeof est dangereux et comment obtenir la taille d'une structure de manière sûre?
- 18. Quel est l'équivalent dans Ruby à la fonction Delphi SizeOf?
- 19. sizeof (void) est égal à 1 en C?
- 20. C++ scanf/printf de gamme
- 21. C# sizeof (enum) alternative? (pour contourner fausse erreur de resharper)?
- 22. sizeof() et le modèle Argument Dans cteur/non-cteur Fonction
- 23. sizeof structure vide est 0 en C et 1 en C++ pourquoi?
- 24. strncpy et en utilisant sizeof pour copier caractères maximum
- 25. sizeof (...) = 0 ou déclaration variable conditionnelle en C++ modèles
- 26. Résultat de 'sizeof' sur le tableau des structures en C?
- 27. Sur quelles plates-formes/compilateurs sizeof (short) n'est PAS 2?
- 28. Comment trouver la mémoire utilisée par un objet en PHP? (sizeof)
- 29. Cause de "erreur: sizeof 'x' est inconnu ou zéro" en C++?
- 30. Est-ce que getchar() est équivalent à scanf ("% c") et putchar() est équivalent à printf ("% c")?
double: [qu'est-ce que sizeof (nom de la fonction) return?] (http://stackoverflow.com/questions/2666392/what-does-sizeof-function-name-return) –