Kezdőlap › Fórumok › Programozás › Több helyen érvényes const hogyan?
- This topic has 4 hozzászólás, 4 résztvevő, and was last updated 20 years, 7 months telt el by
tovis.
-
SzerzőBejegyzés
-
2004-10-11-12:41 #1977255
Vagy használj makrót, vagy az extern kulcsszót:
const.h:
Code:#define MINDENHOVA_KELL_1 1
#define MINDENHOVA_KELL_2 2
#define MINDENHOVA_KELL_3 3vagy
main.c:
Code:#include „const.h”
#include „ideis.h”const int mindenhova_kell[3] = {1, 2, 3};
int main( int argc, char* argv[] ) {
int valami = mindenhova_kell[0];
// ….
}const.h:
Code:extern const int mindenhova_kell[3];2004-10-12-06:52 #1977256Vagy használj makrót, vagy az extern kulcsszót:
Köszi a tippeket, este kipróbálom! Tegnap kísérletezve egy érdekes dolgot találtam, a hiba ennyitõl is elmúlik:
Code:mv *.c *.cppBár a generált kód majdnem kétszer olyan hosszú… :unsure:
2004-10-12-13:55 #1977257Köszi a tippeket, este kipróbálom! Tegnap kísérletezve egy érdekes dolgot találtam, a hiba ennyitõl is elmúlik:
Code:mv *.c *.cppBár a generált kód majdnem kétszer olyan hosszú… :unsure:
[align=right][snapback]89303[/snapback][/align]2004-10-28-11:30 #1977258const int mindenhova_kell[3] = {1, 2, 3};
Most akkor konstans vagy egy közös „viszonylag” változatlan változó?A konstans az inkább ez:
#define MINDENHOVA_KELL „x1x2x3”Az elõbbi is mûködik, de én akkor már valahol, mondjuk a main-ban deklarálnám és mindenütt csak externként hivatkoznék rá, pl.:
extern int *mindenhova_kell;
kivéve persze a main-t, valahogy így
#ifndef _MAIN_MODULE_ /*ezt a main eljén, az include-ok elõtt deklarálnám */
extern int *mindenhova_kell;
#endif2009-12-04-19:56 #1876412Egy programozási gondban kérnék segítséget!
Adva van a következõ mintaprogram:main.c
#include „const.h”
#include „ideis.h”int main( int argc, char* argv[] ) {
int valami = mindenhova_kell[0];
// ….
}const.h
const int mindenhova_kell[3] = {1, 2, 3};
ideis.h
int minta( int akarmi );
ideis.c
#include „ideis.h”
#include „const.h”int minta( int akarmi ) {
int valami = mindenhova_kell[0];
// ….
}Ez csak egy általam lecsonkolt mintakód (az eredeti hosszú lenne) a problémám viszont jól fedi. A const.h-ban van egy konstans, amit a programom több moduljában is el szeretnék érni (itt csak egy plusz modul van (ideis.c), valójában több helyen is kellene). Ha ezt a programot megpróbálom lefordítani, mondjuk így:
gcc -std=c99 -c *.c && gcc *.o
abból a következõ hibaüzenet születik:
main.o(.rodata+0x0): multiple definition of `mindenhova_kell’
ideis.o(.rodata+0x0): first defined here
collect2: ld returned 1 exit statusVagyis a fordítás sikerül, de a linker elakad azon, hogy ez a konstans szerinte kétszer van deklarálva.
Ha megpróbálom az ideis.c-bõl a const.h-ra való hivatkozást kiszedni, akkor a fordításig sem jutok el, mert akkor (jogosan) a mindenhova_kell-rõl nem tudja, micsoda. Ha lokális változóként, mindkét függvényben létrehozom ezt a konstanst, akkor mûködik, de… egyrészt minek foglaljam a memóriát kétszer ugyanazzal, másrészt meg nem túl szép… 🙂
Tud valaki megoldást erre? -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz