J'utilise Linux comme la plate-forme de programmation et la langue C comme langage de programmation.
Mon problème est, je définis une structure dans mon fichier source principal (Main.c): P>
struct test_st
{
int state;
int status;
};
7 Réponses :
Vous pouvez utiliser des pointeurs sur celui-ci dans AutresRC.c: P> AutresRC.c CODE> sans y compris celui-ci: #include "main.h"
Comme chez les autresrc.c, je dois définir la structure test_st * LCST; ?
La déclaration à terme est inutile, déclarez simplement des pointeurs. Vous pouvez donc écrire une fonction Void FOO (Test_st * LCST); Code> Cependant, vous pouvez voir l'un des filles à l'intérieur de la structure, de sorte que tout ce qui doit fonctionner avec les données à l'intérieur doit être à l'intérieur. c Ou vous pouvez mettre la définition de la structure dans un en-tête
Le mettre dans un fichier d'en-tête est le moyen normal et correct de déclarer des types partagés entre les fichiers source. p>
En empêchant, vous pouvez traiter Main.c en tant que fichier d'en-tête et l'inclure dans l'autre fichier, puis compilez uniquement l'autre fichier. Ou vous pouvez déclarer la même structure dans les deux fichiers et laisser une note à vous-même de la modifier aux deux endroits. P>
C Support compilation séparée . P>
Mettez la déclaration de structure dans un fichier em> fichier em> et #include "..." code> dans les fichiers source. p>
Vous pouvez définir la structure dans chaque fichier source, puis déclarer la variable d'instance une fois en tant que globale, et une fois comme externe: Le linker fera ensuite la magie, la source Le fichier pointera sur la même variable. P> Toutefois, la duplication d'une définition dans plusieurs fichiers source est une mauvaise pratique de codage, car en cas de modifications que vous devez modifier manuellement chaque définition. P> La solution facile consiste à mettre la définition dans un fichier d'en-tête, puis à l'inclure dans tout le fichier source qui utilise la structure. Pour accéder à la même instance de la structure sur les fichiers source, vous pouvez toujours utiliser la méthode extern code>. P>
@kuhaku: Vous devez définir la structure dans un fichier d'en-tête. La duplication de la définition est une très mauvaise pratique de programmation, car vous devez modifier manuellement chaque définition en cas de modification.
// use a header file. It's the right thing to do. Why not learn correctly?
//in a "defines.h" file:
//----------------------
typedef struct
{
int state;
int status;
} TEST_ST;
//in your main.cpp file:
//----------------------
#include "defines.h"
TEST_ST test_st;
test_st.state = 1;
test_st.status = 2;
//in your other.ccp file:
#include "defines.h"
extern TEST_ST test_st;
printf ("Struct == %d, %d\n", test_st.state, test_st.status);
N'a pas vraiment besoin de la typlef et de certaines personnes ne les aiment pas
Fichier d'en-tête / * Inclure ce fichier d'en-tête dans File1.c et File2.c
use extern struct a xyz[10]
Il est parfaitement raisonnable d'être inclusif avec les structures en les laissant dans le fichier source. C'est l'encapsulation. Toutefois, si vous allez redéfinir la struct plusieurs fois dans plusieurs fichiers source, vous pouvez également définir la struct une fois dans un fichier d'en-tête et inclure ce fichier si nécessaire. P>
Bien sûr, tant que cela est défini avant d'essayer d'inclure des fichiers qui tentent de l'utiliser.
Je ne comprends pas pourquoi vous ne voudriez pas inclure un en-tête.