133 votes

« int main (vooid) » ? Comment ça marche ?

J'ai récemment eu à taper dans un petit C programme de test et, dans le processus, j'ai fait une faute d'orthographe dans la fonction principale par accidentellement à l'aide de vooid au lieu de void.

Et pourtant il travaillait encore.

En la réduisant à sa plus petite version complète, j'ai fini avec:

int main (vooid) {
    return 42;
}

Ce n'est en effet compiler (gcc -Wall -o myprog myprog.c) et, lorsqu'il est exécuté, il retourne 42.

Comment cela est-il valable code?


Voici une transcription coupé et collé de mon bash coque pour montrer ce que je fais:

pax$ cat qq.c
int main (vooid) {
    return 42;
}

pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq

pax$ echo $?
42

219voto

Oli Charlesworth Points 148744

Il est tout simplement à l’aide de la syntaxe de la déclaration de la fonction « anciens » ; vous êtes déclarer implicitement une paramètre appelé .

69voto

Michael Goldshteyn Points 24679

C’est un code valide, parce que myprog.c contient :

contient un plus le nombre d’arguments passés (p. ex., ). Alors, en effet, tout ce que vous avez fait est de renommer à .

23voto

Chinmay Kanchi Points 16353

C, est le type par défaut pour un argument de fonction . Ainsi, votre programme est le traitement le mot comme `` , qui est parfaitement valide.

20voto

vpit3833 Points 4435

C’est seulement et ne pas émettre un avertissement. Toutes les autres normes émettent un avertissement au sujet des types implicites pour .

se comporte de la même manière comme le fait .

``retourne le nombre d’arguments de ligne de commande.

J’ai testé avec gcc 4.4.5 sur Debian système d’essai.

-4voto

Anshul garg Points 141

Votre compilateur utilise la syntaxe de la déclaration de la fonction « anciens » ; Donc quand tu es de passage vooid en tant que paramètre à main il ne sera pas se plaindre il traite comme variable de type int

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X