Salut les C,

J'ai un programme de plusieurs fichiers sources ayant chacun sont header et j'utilise un Makefile pour compiler chaque fichier *.c.

D'abords le sujet N° 1: les variables externes marqué extern.

J'ai une structure de type GUI ressemblant a ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/** File gui_structure.h . **/
 
typedef struct {
 
  GtkWidget *icon ;
 
  GtkWidget *label ;
 
  GtkWidget *accel_label ;
 
} MenuItem ;
 
/** etc more typedef struct { ... } **/
 
typedef struct {
 
  MenuItem files ;
 
  MenuItem action ;
 
  GtkWidget *hbox ;
 
  // etc...
} GUI ;
 
// Etc...
Puis j'ai un fichier de déclaration de variables globale:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
/** Files global_variables.h **/ 
 
GUI *gui ;
Puis je me retrouve souvent a n'avoir besoin que de gui->notebook_editor ou gui->notebook_terminals, dans mes fichiers.

Alors dans mes fonctions je déclare:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
void callback(GtkWidget *widget, gpointer user_data) {
 
  extern GUI *gui ;
 
  // ...
 
  return ;
}
Alors j'ai un doute: est que ça serai mieux de déclarer un alias de gui->notebook_editor sous forme de pointeur déclarer comme une variable globale ?

Je ne le fait pas pour l'instant car je pense que si je déclare:
cela revient au même: copier l'adresse du pointeur de toute la structure GUI *gui c.a.d la taille d'un pointeur.

A la place d'utiliser un pointeur alias sur un seule GtkWidget *.

NOTE: je ne peut pas passer la variable gui par l'argument user_data.



Sinon j'ai un problème avec le Makefile.

Quand j'ajoute un fichier je l'ajoute a une liste (a savoir que l'arborescence est complexe).

Et j'aimerai utiliser le feature de règle implicite...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
SRC_FILES = ./folder1/file1.c \
                   ./folder2/file2.c \
                   ./folder3/subfolder1/file3.c 
 
TMP = $(notdir $(SRC_FILES:.c=.o))
 
OBJECTS = $(TMP:%=./build/%) 
 
prgname: $(OBJECTS)
    $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS)
 
$(word 1, $(OBJECTS)): $(word 1, $(SRC_FILES))
    $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS)
 
# Etc ...
 
# My try for implicite rules build:
 
VPATH = ./folder1 ./folder2 ./folder3/subfolder1 ./build
 
%o: %c $(SRC_FILES) $(OBJECTS)
    $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS)
 
 
# What lack me to success implicte build ?
Vous avez remarquer que j'utilise un dossier pour le build ce qui rend la chose plus difficile.

Merci pour vos réponses éclairées et votre précieuse aide.