PDA

Visualizza la versione completa : [C] Const e moduli


ciofx
06-10-2009, 21:56
Problema:

ho 3 file (in realtà molti di più)

dato che, stando agli standard GNU, l'uso di #define è deprecato, quindi è meglio usare const !quando possibile!

ho il seguente problema a tempo di compilazione:

In file included from main.c :
a.h error: conflicting types for ‘VAR’
b.c error: previous definition of ‘VAR’ was here


nel main viene incluso il file b.c che contiene (solo) la seguente riga

#ifundef blabla
#define blabla
const char VAR[] = "testo";
#endif


in un altro file ( o meglio nel suo header ) a.h le costanti vengono chiamate nel seguente modo

extern char *VAR;

----------------------------------------------- :dhò:

MacApp
07-10-2009, 00:40
/* main.c */

#include <stdio.h>
#include "extern_const.h"

int main (void){
printf ("my_extern_const_1: %s;\n", my_extern_const_1);
printf ("my_extern_const_2: %s;\n", my_extern_const_2);
return 0;
}




/* extern_const.h */

#ifndef extern_const_h
#define extern_const_h

extern const char my_extern_const_1 [];
extern const char * my_extern_const_2;

#endif




/* extern_const.c */

#include "extern_const.h"

const char my_extern_const_1 [] = "my extern const 1";
const char * my_extern_const_2 = "my extern const 2";





$ gcc --version
i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
Copyright (C) 2005 Free Software Foundation, Inc.
$ gcc -Wall -ansi -pedantic -Wextra -Wconversion main.c extern_const.c
$ ./a.out
my_extern_const_1: my extern const 1;
my_extern_const_2: my extern const 2;

ciofx
12-10-2009, 22:32
:master:

Ok, condivido la soluzione, ma è rognosa...
...
alla fine
...
ho preferito inserire 'static const' per consentire le dichiarazioni multiple e dichiarare le costanti direttamente nell'header :eek:


Grazie cmq :ciauz:

Loading