Bonjour à tous,
Je voulais savoir s'il est possible de faire un exécutable en C sans la fonction main ? Merci d'avance
Bonjour à tous,
Je voulais savoir s'il est possible de faire un exécutable en C sans la fonction main ? Merci d'avance
Salut,
Pour qu'un processeur exécute une suite d'instructions, il faut lui dire où est la première instruction, c'est entre autres le rôle de la fonction main qui est le point d'entrée. S'il n'y a pas d'instruction à exécuter, on ne peut plus parler d'exécutable. Une librairie n'a pas de fonction main, mais elle n'est pas exécutable, on peut appeler ses fonctions individuellement.
A+
Pfeuh
Tu peux ne pas avoir de fonction qui s'appelle main mais tu dois avoir une fonction de même prototype que main et tu dois dire à ton compilateur que cette fonction est le point d'entrée du programme. D'ailleurs, main c'est juste pour dire par défaut au compilateur "ceci est la fonction principale". Il est très probable que le compilateur génère ensuite un code avec un VRAI point d'entrée reconnu par l'OS cible qui se contentera d'appeler la fonction main. Le prototype de cette fonction n'est pas nécessairement le même que celui de main. Sous certains systèmes par contre, principalement UNIX, le point d'entrée de chaque programme est réellement main donc le compilateur ne fait pas la bidouille que je viens de t'expliquer.
Il arrive même sous certains environnements que le compilateur exige directement une fonction spécifique différente de main comme point d'entrée au lieu de celle-ci. C'est le cas si tu développes des applications graphiques sous Windows par exemple, où le point d'entrée est une fonction appelée WinMain et non plus main.
Grand merci, je viens de me rendre compte et encore une merci pour vos explications.
Je relance ce fil car en ce moment j apprends a utiliser flex, je suis le manuel et les premiers exemples de fichier a fournir a flex ne definissent pas de fonction main...
Je suis donc allé voir dans le fichier .c censé contenir le scanner et dans ce cas il ne contient pas non plus de fonction main (en apparrence en tout cas, j ai beau chercher dans les directive #include mais je n en trouve pas la non plus...). Pourtant le programme compile et fournit un executable tout a fait executable.
Après avoir découvert l option -E de gcc, je ne trouve toujours pas trace de cette satanée fonction main...
J ai mal cherché ?
Il s'agit d'un cas particulier. Pour créer un exécutable s'appuyant sur flex, il faut lier (linker) avec la bibliothèque flex (-lfl) qui contient la fonction main.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6$ nm /usr/lib/x86_64-linux-gnu/libfl_pic.a libfl_pic_a-libmain.o: U _GLOBAL_OFFSET_TABLE_ 0000000000000000 T main U yylex
ɹǝsn *sıɹɐlos*
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager