Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: shadius 13 Prosince 2010, 14:45:04
-
Dobrý den, mám menší problém v C. Ve svém programu používám následující vlastní datové typy - struktury:
typedef struct atrib {
char *att_name;
char *att_value;
int name_len;
int value_len;
struct atrib *next_atrib;
} ATRIB;
typedef struct tag {
int type;
char *p_name;
int name_len;
ATRIB *atributes;
struct tag *next_tag;
} TAG;
Problém mám s tím, že tyto datové typy občas předávám jako parametry funkce. A ty musím mít v hlavičkovém souboru - využívá je více modulů. Bohužel ale překladač nejsem schopen přinutit aby pochopil že v parametru v .h souboru je můj datový typ a ne nějaká blbost. Logicky připlácnu do hlavičkového souboru ty definice, tzn. to bude vypadat následovně: typedef struct atrib {
char *att_name;
char *att_value;
int name_len;
int value_len;
struct atrib *next_atrib;
} ATRIB;
typedef struct tag {
int type;
char *p_name;
int name_len;
ATRIB *atributes;
struct tag *next_tag;
} TAG;
extern void push(TAG *new_tag);
extern TAG *pop();
extern TAG *look();
extern int is_empty();
a pak to funguje...ale jen pro tenhle jeden modul, v jiném hlavičkovém souboru - kde jsou zase funkce s mými datovými typy v parametru/návr. hodnotě - to zase nefunguje. A fígl s připlácnutím toho typedef před to už nemůžu použít, protože redefinuji již definované, což se překladači nelíbí. Výsledek je pak podle očekávání stack.h:5: error: expected ‘)’ before ‘*’ token
stack.h:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
stack.h:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
Nevíte někdo jak se to dělá správně?
-
Když si uděláte soubor např. structury.h a do něj vložíte definice struktur, které používáte a ten soubor includujete do všech "modulů", kde chcete použít ony datové struktury, pak to musí naprosto spolehlivě fungovat... popřípadě s tím structury.h pošlete kompletní příklad a co pak vyhazuje kompilátor ;)
-
Když si uděláte soubor např. structury.h a do něj vložíte definice struktur, které používáte a ten soubor includujete do všech "modulů", kde chcete použít ony datové struktury, pak to musí naprosto spolehlivě fungovat... popřípadě s tím structury.h pošlete kompletní příklad a co pak vyhazuje kompilátor ;)
A na konec toho hlavičkového souboru structury.h dej
#define STRUCTURY_H
a následně ve všech zdrojákách na začátek
#ifndef STRUCTURY_H
#include "structury.h"
#endif
-
A na konec toho hlavičkového souboru structury.h dej
#define STRUCTURY_H
a následně ve všech zdrojákách na začátek
#ifndef STRUCTURY_H
#include "structury.h"
#endif
spíše se to dělá tak, že hlavičkový soubor se zabalí do
#ifndef STRUCTURY_H
#define STRUCTURY_H
...
#endif
a pak se ten hlavičkový soubor jenom includuje
-
Hoši tak todle fakt neřeším... pokud máte dobré IDE, tak toto dělá za Vás ... takže to ani dá se říct neumí ;D
Každopádně by mě zajímalo jak dotyčný válčí... zda to pomohlo ... popřípadě konkrétnější detaily co to dělá nyní.
-
Já to dělám přesně, jak psal Yontalcar, tedy:
#ifndef HEADER_H_
#define HEADER_H_
nějaké blbiny ..
#endif
a pak jen #include "header.h" :)
(napsal bych dřív, ale bohužel jsem předtím z dotazu nepochopil, o co dotyčnému vlastně jde) ;D
-
spíše se to dělá tak, že hlavičkový soubor se zabalí do
#ifndef STRUCTURY_H
#define STRUCTURY_H
...
#endif
a pak se ten hlavičkový soubor jenom includuje
Hmm, tvá verze je úspornější. :)
Každopádně výsledek je stejný, includuje se jenom jednou.
-
Hoši tak todle fakt neřeším... pokud máte dobré IDE, tak toto dělá za Vás ... takže to ani dá se říct neumí ;D
Každopádně by mě zajímalo jak dotyčný válčí... zda to pomohlo ... popřípadě konkrétnější detaily co to dělá nyní.
rozhodně to již pomohlo. Myslel jsem si že ho hlavičkovejch souborů se zásadně neincluduje a ono jo - holt začátky v C, doteď jsem jel jenom javu a jiné srandy ala PHP :) IDE neřeším, píšu to v kate, našeptávač to má, odsazování taky. Jen tak pro zajímavost, vyrábím XML parser...
-
Označil jsem tedy za vyřešeno. Copak to parsujete...?
-
Označil jsem tedy za vyřešeno. Copak to parsujete...?
aaale semestralka z C. musím hledat syntaktické chyby, detekovat kodování a jiné libůstky :)