2017-08-15 1 views
2

Chaque fonction C doit avoir une convention d'appel, mais quelle est la convention d'appel de la fonction main (je pense qu'il est la cdecl convention d'appel mais je ne suis pas sûr)?Quelle est la convention d'appel pour la fonction principale en C?

+5

Le langage C ne définit aucune convention d'appel. Vous voudrez peut-être ajouter quelques balises plus pertinentes et d'autres informations dans votre question. –

+0

'main' a la même convention d'appel que n'importe quelle autre fonction; '_start' (un point d'entrée typique dans ELF), d'autre part, _is_ cdecl et doit gérer la conversion à la convention d'appel native pour main (entre autres) ... ne sait pas pourquoi' _start' n'utilise pas la convention d'appel native ... probablement parce que sous Linux, la source binfmt_elf se trouve dans le répertoire ./fs (système de fichiers) au lieu de ./arch et 32 ​​bits x86 utilisait cdecl, il était donc facile d'être paresseux et de forcer tous les Plate-forme cdecl pour exiger des intrinsèques spécifiques à l'assemblage ou au compilateur dans leur libc. – technosaurus

Répondre

3

Cela dépend de l'architecture et de la plate-forme. Un grand nombre de spécifications d'exécution x86 C nécessitent que le principal soit cdecl, mais ce n'est en aucun cas garanti.

La ligne de fond est que vous n'allez trouver cette information dans la norme C parce que la langue ne soit pas lié à une architecture. Vous pourriez avoir plus de chance de lire la documentation du compilateur particulier (s) qui vous intéresse.

2

langage C ne définit pas la convention d'appel, mais l'architecture du processeur et la plate-forme de développement fait. Pour convention d'appel X86 s'il vous plaît vérifier wiki https://en.wikipedia.org/wiki/X86_calling_conventions

Voir aussi la convention d'appel ARM à lien ci-dessous http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf

Plus d'informations sur la convention d'appel voir lien ci-dessous wiki https://en.wikipedia.org/wiki/Calling_convention

Vérifiez également la discussion à propos de MIPS convention d'appel à GCC MIPS-32 Calling Conventions/Stack Frame Definition