2016-07-29 1 views
0

Est-il possible d'écrire un programme sans fonction main()?Erreur Référence non définie à 'WinMain @ 16'

J'ai écrit ce code et enregistré un nom de fichier comme withoutmain.c et obtenir une erreur

undefined reference to '[email protected]'" 

Mon code

#include<stdio.h> 
    #include<windows.h> 
    extern void _exit(register int code); 
    _start(){ 
     int retval; 
     retval=myFunc(); 
     _exit(retval); 
    } 
    int myFunc(void){ 
    printf("Hiii Pratishtha"); 
    return 0; 
    } 

S'il vous plaît me fournir la solution de ce problème et aussi la mémoire appropriée la construction du code et ce qui se passe à la fin du compilateur de ce programme. Merci!

+0

La solution est simple: n'écrivez pas un programme sans 'main()'. –

+0

Il doit y avoir un moyen de spécifier le point d'entrée dans vos options d'éditeur de liens, mais pour gcc je ne le connais pas. Pourquoi ne cherchez-vous pas dans la documentation? – Medinoc

+0

Copie possible de [Comment changer le point d'entrée du programme C avec gcc?] (Http://stackoverflow.com/questions/7494244/how-to-change-entry-point-of-c-program-with-gcc) – Medinoc

Répondre

0

Un programme peut-il être écrit sans la fonction main()?

Oui, il peut y avoir un programme C sans fonction principale. Je suggère deux solutions .......

1) à l'aide d'une macro qui définit principale Pour définir cette option de liaison

#include<stdio.h> 
#include<windows.h> 
#define _start main 
extern void _exit(register int code); 

int myFunc(void){ 
    printf("Hiii Pratishtha"); 
    return 0; 
} 

int _start(){ 
    int retval; 
    retval=myFunc(); 
    _exit(retval); 
} 

2) Using Entry Point (Assuming you are using visual studio)

dans le Environnement de développement Visual Studio

/ENTRY:function 

Une fonc tion qui spécifie une adresse de départ définie par l'utilisateur pour un fichier .exe ou une DLL.

  1. Ouvrez la boîte de dialogue Pages de propriétés du projet. Pour plus de détails, voir Définition des propriétés de projet Visual C++.
  2. LCliquez sur le dossier Linker.
  3. Cliquez sur la page de propriétés avancées.
  4. Modifiez la propriété Point d'entrée.

OU

si vous utilisez gcc puis

-Wl,-e_start 

la -Wl ... chose transmet des arguments à l'éditeur de liens, et l'éditeur de liens prend un argument -e pour définir l'entrée function