2011-06-02 5 views
-5

Comment écrire un programme C sans utiliser Main ...! Lorsque j'apprends à écrire un fichier ASM par un simple fichier C [de longueur 3 lignes], j'ai ce doute. I fichier d'assemblage J'ai utilisé préambule et post ambles, à la fonction.Comment écrire un programme C sans 'main'?

+1

Jetez un oeil à: [http://stackoverflow.com/questions/4113731/is-a-main-required -pour-ac-programme] (http: // stackoverflow.com/questions/4113731/is-a-main-required-for-ac-program), rechercher des sujets similaires dans stackoverflow, il y en a beaucoup – phoxis

Répondre

3

Il y a un grand article et créer le plus petit binaire elf possible here. Il a beaucoup d'informations sur ce qui est nécessaire pour avoir quelque chose de runnable par l'os.

+0

Un autre article similaire peut être trouvé sur le [blog ksplice] (http: //blog.ksplice.com/2010/03/libc-free-world/) –

2

C'est une astuce logique. Ceux qui ne le savent pas peuvent apprendre cette astuce.

#include<stdio.h> 
#include<conio.h> 
#define decode(s,t,u,m,p,e,d) m##s##u##t 
#define begin decode(a,n,i,m,a,t,e) 
void begin() 
{ 
    clrscr(); 
    printf("\nHello !!! Kaushal Patel."); 
    getch(); 
} 

Explication:
La directive préprocesseur #define avec des arguments est utilisé pour donner une impression que le programme fonctionne sans main(). Mais en réalité, il fonctionne avec un caché main().

L'opérateur ‘ ## ‘ est appelé l'opérateur de collage de jetons ou de fusion de jetons. C'est comment, je peux fusionner deux ou plusieurs caractères avec elle.

#define decode(s,t,u,m,p,e,d) m##s##u##t 

Le macro decode(s,t,u,m,p,e,d) s'étoffe comme “ MSUT ” (l'opérateur de ## fusionne m, s, u t & en MSUT). La logique est quand je passe (s, t, u, m, p, e, d) comme argument il fusionne le 4ème, 1er, 3ème & le 2ème caractères.

#define begin decode(a,n,i,m,a,t,e) 

Voici le pré-processeur remplace le “ macro commencer ” avec l'expansion decode (a, n, i, m, a, t, e). Selon la définition de la macro dans la ligne précédente, l'argument doit être étendu de sorte que le 4ème, le 1er, le 3ème & les caractères doivent être fusionnés. Dans l'argument (a, n, i, m, a, t, e) 4e, 1er, 3e & 2e personnages sont ‘ m ’, ’ un ’, ’ i ’ & ‘ n ’.

Ainsi, la troisième ligne “ vide commence ” est remplacé par “ void main ” par le pré-processeur avant que le programme est transmis pour le compilateur.

Source: http://ctechnotips.blogspot.in/2012/04/writing-c-c-program-without-main.html

0

Voici votre réponse: ->

#include <stdio.h> 

extern void _exit(register int); 

int _start(){ 

printf(“Hello World\n”); 

_exit(0); 

} 
Questions connexes