2010-09-04 7 views
0
#include <stdio.h> 
#define main() main(){printf("hi");}int i() 
main() 
{//empty main 
} 

ce qui est l'utilisation de int i()ce qui est l'utilisation d'int i()

+1

Votre code n'a pas de sens . Je l'ai édité mais je viens de mettre tout juste quatre espaces vers la droite. En l'état, 'int i();' est un prototype pour une fonction 'i' qui retourne un' int' et ne prend aucun argument. – aaronasterling

+0

@aaron Il construit, il se transforme juste en deux fonctions 'main() {printf (" hi ");}' et 'int i() {}', mais cette macro est assez absurde. C'est une sorte de sorcellerie maléfique pour remplacer 'main', et je détesterais vraiment jamais rencontrer cela dans le code réel –

+0

@Michael, je n'ai jamais dit qu'il ne construisait pas;) J'ai raté les accolades en faisant une définition et pas un prototype cependant. – aaronasterling

Répondre

3

C'est un programme assez stupide, mais le but de la int i() est pour qu'il compilera - les accolades à la fin:

{//empty main 
} 

provoquera une erreur s'il n'y a pas une déclaration de fonction incluse dans la déclaration #define. Si je le supprimer, gcc donne l'erreur:

testfile.c:4: error: expected identifier or ‘(’ before ‘{’ token 

Vous pouvez utiliser le drapeau -E gcc pour voir pourquoi le int i() est nécessaire - il vous montrera la sortie du préprocesseur sans compilation.

1

Pensez à ce que vous obtenez si vous développez la main() macro dans le programme:

#include <stdio.h> 
main(){printf("hi");}int i() 
{//empty main 
} 

L'on a besoin d'int i() pour faire le reste { ... } partie d'une définition de fonction syntaxiquement valide. En ce qui concerne l'intention, je peux seulement deviner que le point de la macro est de remplacer le main existant par un bout. C'est un peu IMO.

+0

merci .. j'ai compris. – elle

2

Dans ce code main() sera étendu et le résultat se terminera par

int i() 
{//empty main 
} 

what is the use of int i()

Il rend la sortie d'un très étrange et cassé compilable macro

0
#include <stdio.h> 
    #define main() main(){printf("hi");}int i() 
    main() 
    {//empty main 
    } 
    I guess int i() is another preprocessor directive which should be called in the program after main.