GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi est-ce que j'obtiens une erreur de types conflictuels pour getline lors de la compilation de l'exemple de ligne la plus longue du chapitre 1 de K&R2 ?

La fonction conflictuelle getline() est une extension GNU/POSIX.

K&R déclarent qu'ils traitent spécifiquement ANSI C dans leur livre (cf.), qui ne fournit pas cette fonction.

Les auteurs présentent le guide complet de la programmation en langage C standard ANSI.

Pour définir gcc en "mode de compatibilité K&R", vous pouvez spécifier les modes ANSI ou ISO pour la compilation. Celles-ci sont destinées à désactiver les extensions, par exemple la fonction getline() .Cela pourrait éventuellement éliminer le besoin de modifier également d'autres exemples fournis par K&R.

Par exemple, la compilation suivante fonctionne parfaitement :

$ gcc test.c -ansi
$ gcc test.c -std=c89

(Sauf qu'ils se plaignent du type de retour par défaut implicite de main() avec -Wall .)

Apparemment, sur certains systèmes, ces modes peuvent ne pas fonctionner comme présenté ici (apparemment, certaines versions de Mac OS ne parviennent pas à désactiver correctement toutes les extensions). J'ai testé ceci avec succès sur ma machine :

$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Le problème est que getline() est une fonction de bibliothèque standard. (défini dans stdio.h ) Votre fonction porte le même nom et entre donc en conflit avec lui.

La solution consiste simplement à changer le nom.


C'est parce que le stdio.h avoir un getline() fonction.

Donc, une chose simple pour que cela fonctionne serait de renommer votre fonction en my_getline()

Les deux getline() et getdelim() étaient à l'origine GNU extensions. Ils ont été standardisés en POSIX.1-2008 .


Linux
  1. Soyez trié avec sort en ligne de commande

  2. Astuces Bash pour tous les jours en ligne de commande

  3. Quand reçoit-on le message d'erreur "jobs :Not Found" ?

  4. Comment joindre la ligne suivante lorsqu'une ligne correspond à une expression régulière pour un document entier dans Vi ?

  5. Pourquoi "zip" dans une boucle For fonctionne-t-il lorsque le fichier existe, mais pas lorsqu'il n'existe pas ?

8 conseils pour la ligne de commande Linux

4 outils Markdown pour la ligne de commande Linux

Pourquoi utiliser le bureau Pantheon pour Linux Elementary OS

3 gestionnaires de mots de passe pour la ligne de commande Linux

Quand vérifier EINTR et répéter l'appel de fonction ?

obtenir une erreur de ligne de commande incorrecte lors de la tentative d'extraction de l'archive 7zip sous Linux