Path: ...!npeer.as286.net!npeer-ng0.as286.net!feeder1-1.proxad.net!proxad.net!feeder1-2.proxad.net!fdn.fr!usenet-fr.net!.POSTED!not-for-mail From: Olivier Miakinen Newsgroups: fr.comp.lang.c Subject: =?UTF-8?Q?Re:_D=c3=a9claration_extern?= Date: Sun, 17 Dec 2023 21:57:53 +0100 Organization: There's no cabale Lines: 42 Message-ID: References: <657f1dd4$0$10079$426a74cc@news.free.fr> NNTP-Posting-Host: 200.89.28.93.rev.sfr.net Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit X-Trace: cabale.usenet-fr.net 1702846675 68245 93.28.89.200 (17 Dec 2023 20:57:55 GMT) X-Complaints-To: abuse@usenet-fr.net NNTP-Posting-Date: Sun, 17 Dec 2023 20:57:55 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4 In-Reply-To: <657f1dd4$0$10079$426a74cc@news.free.fr> Bytes: 2399 Bonjour, Le 17/12/2023 17:12, Thomas Nemeth a écrit : > > Récemment je suis tombé sur une remarque d'un collègue à propos > du mot-clé "extern". Il me soutenait qu'il faut le mettre sur > les déclarations de fonctions exportées dans les headers. ie: > > Fichier .c : > > int toto(void) > { > return 0; > } > > Fichier .h : > > extern int toto(void); Je n'ai malheureusement pas de pointeur vers une doc officielle à te donner, alors si c'est ça que tu cherches je suis désolé de ne pas pouvoir t'aider. Je peux malgré tout donner mon avis, basé à la fois sur la logique et sur ma propre pratique du langage C. Le mot-clé extern est utile pour une variable, car selon qu'on la déclare ou non extern le compilateur saura s'il doit réserver de la mémoire (sans extern) ou s'il sait que la mémoire sera réservée ailleurs et que ce sera résolu par l'éditeur de lien (avec extern). Mais dans le cas d'une fonction, vu que la déclaration dans un .h ne peut pas réserver de la mémoire pour du code qui n'est pas défini dans ce même .h, le mot-clé extern est optionnel car implicite. En résumé : tu fais bien comme tu veux. Soit tu mets ce mot-clé extern par souci esthétique, pour faire avec les fonctions comme avec les variables, soit tu ne le mets pas parce qu'il ne sert à rien. -- Olivier Miakinen