Deutsch   English   Français   Italiano  
<ulnncj$22kl$1@cabale.usenet-fr.net>

View for Bookmarking (what is this?)
Look up another Usenet article

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 <om+news@miakinen.net>
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: <ulnncj$22kl$1@cabale.usenet-fr.net>
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