J'ai écrit un exemple de programme sur les structures. J'ai écrit 3 fichiers source et un fichier 1 en-tête. Ceci est la source complète du programme:Quel est le problème avec ce code C?
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "fish.h"
/*
struct fish
{
const char *name;
const char *species;
int teeth;
int age;
};
*/
/*
void catalog(struct fish f)
{
printf("%s is a %s with %i teeth. He is %i.",
f.name, f.species, f.teeth, f.age);
}
void label(struct fish f)
{
printf("Name: %s\n", f.name);
printf("Species: %s\n", f.species);
printf("Teeth: %i\n", f.teeth);
printf("Age: %i\n", f.age);
}
*/
int main()
{
struct fish snappy = {"Snappy", "Piranha", 69, 4};
catalog(snappy);
label(snappy);
return 0;
}
label.c:
#include "fish.h"
void label(struct fish f)
{
printf("Name: %s\n", f.name);
printf("Species: %s\n", f.species);
printf("Teeth: %i\n", f.teeth);
printf("Age: %i\n", f.age);
}
catalog.c:
#include "fish.h"
void catalog(struct fish f)
{
printf("%s is a %s with %i teeth. He is %i.",
f.name, f.species, f.teeth, f.age);
}
J'ai aussi écrit une Fichier Make:
fish.o: main.c label.c catalog.c fish.h
gcc -c main.c label.c catalog.c
fish: fish.o
gcc fish.o -o fish
Je compilez le programme cmd:
make fish
Il dit:
gcc -c main.c label.c catalog.c
label.c: In function 'label':
label.c:5:5: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
catalog.c: In function 'catalog':
catalog.c:5:5: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
cc fish.o -o fish
cc.exe: error: fish.o: No such file or directory
cc.exe: fatal error: no input files
compilation terminated.
make: *** [fish] Error 1
Si je supprime les commentaires dans le main.c et de la compilation, ça marche, mais quand je me suis cassé en petites pièces comme mentionné ci-dessus, cela ne fonctionne pas.
Quel est le problème?
Les avertissements de compilation sont corrigés en incluant '#include' dans les fichiers qui utilisent 'printf()'. Ne prenez pas la peine de lutter avec des alternatives; il suffit d'inclure l'en-tête standard. –
merci Jonathan, ça marche. Bien. – 0xEDD1E