Pourquoi le code suivant est-il compilé?Pourquoi cet extrait de code est-il compilé?
#include <stdio.h>
int main(void) {
getchar;
}
Pourquoi le code suivant est-il compilé?Pourquoi cet extrait de code est-il compilé?
#include <stdio.h>
int main(void) {
getchar;
}
Parce que les noms de fonctions sont des alias des pointeurs de fonction à ces fonctions, qui sont eux-mêmes des valeurs beaucoup plus comme des entiers .. Ceci est sémantiquement très similaire à
#include <stdio.h>
int main(void) {
42;
}
Il est valide mais inutile.
Et très ennuyeux !!!! taper "int x = getX" au lieu de "x = getX()" fonctionnera plutôt bien et mettra une valeur d'adresse aléatoire dans x. –
Je déteste C.> _ <[15 char filler] – missingfaktor
@Rahul: Ce n'est pas une attitude très * polyglotte *! – Tarydon
La même raison 1;
serait la compilation, getchar
est juste une adresse à une fonction. Le résultat est évalué, puis rejeté. Dans la spécification du langage, il s'agit d'une "déclaration d'expression";
C est bizarre, ce code compile aussi, mais il se sépare qui, pour l'enregistrement, est la plus petite erreur de ségrégation dans l'histoire C .
main;
Parce que son sans erreur? –
@Xinxua - +1/agree –
Cela revient essentiellement à savoir si 'getchar' est autorisé à être une macro. Si c'est le cas, le code peut ne pas être correct. –