Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: [C] hlavičkové soubory [vyřešeno]  (Přečteno 3061 krát)

shadius

  • Návštěvník
  • Příspěvků: 57
[C] hlavičkové soubory [vyřešeno]
« kdy: 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:
Kód: [Vybrat]
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ě:
Kód: [Vybrat]
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í
Kód: [Vybrat]
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ě?
« Poslední změna: 15 Prosince 2010, 08:59:23 od Martin - ViPEr*CZ* »

Martin - ViPEr*CZ*

Re: [C] hlavičkové soubory
« Odpověď #1 kdy: 13 Prosince 2010, 15:13:52 »
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 ;)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re: [C] hlavičkové soubory
« Odpověď #2 kdy: 14 Prosince 2010, 09:58:14 »
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
Kód: [Vybrat]
#define STRUCTURY_H

a následně ve všech zdrojákách na začátek
Kód: [Vybrat]
#ifndef STRUCTURY_H
#include "structury.h"
#endif
« Poslední změna: 14 Prosince 2010, 10:00:25 od sachy »
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

Yontalcar

  • Stálý člen
  • **
  • Příspěvků: 833
  • Semper fidelis
Re: [C] hlavičkové soubory
« Odpověď #3 kdy: 14 Prosince 2010, 10:28:48 »
A na konec toho hlavičkového souboru structury.h dej
Kód: [Vybrat]
#define STRUCTURY_H

a následně ve všech zdrojákách na začátek
Kód: [Vybrat]
#ifndef STRUCTURY_H
#include "structury.h"
#endif
spíše se to dělá tak, že hlavičkový soubor se zabalí  do
Kód: [Vybrat]
#ifndef STRUCTURY_H
#define STRUCTURY_H
...
#endif
a pak se ten hlavičkový soubor jenom includuje
NB: ASUS X53U - AMD Brazos E450; Debian GNU/Linux Sid amd64 (KDE 4.14)
Jen dvě věci jsou nekonečné - vesmír a lidská hloupost. Tím prvním si ovšem nejsem tak jist. - Albert Einstein

Martin - ViPEr*CZ*

Re: [C] hlavičkové soubory
« Odpověď #4 kdy: 14 Prosince 2010, 11:10:55 »
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í.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Firzen

  • Stálý člen
  • **
  • Příspěvků: 1287
    • Beroot
Re: [C] hlavičkové soubory
« Odpověď #5 kdy: 14 Prosince 2010, 15:36:17 »
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
AMD Phenom II X6 1100T@3,3GHz, Gigabyte GeForce GT 430 1GiB, 8GiB RAM, 1TiB SATA3 HDD, Nokia N900
OS: Debian 6.0 Squeeze, Maemo 5
Citace
Prosintě ty jsi takový zkušený vývojář - co mám dělat, když nevím, jako něco udělat? :D

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re: [C] hlavičkové soubory
« Odpověď #6 kdy: 14 Prosince 2010, 20:27:23 »
spíše se to dělá tak, že hlavičkový soubor se zabalí  do
Kód: [Vybrat]
#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.
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

shadius

  • Návštěvník
  • Příspěvků: 57
Re: [C] hlavičkové soubory
« Odpověď #7 kdy: 14 Prosince 2010, 22:50:58 »
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...

Martin - ViPEr*CZ*

Re: [C] hlavičkové soubory [vyřešeno]
« Odpověď #8 kdy: 15 Prosince 2010, 08:59:55 »
Označil jsem tedy za vyřešeno. Copak to parsujete...?
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

shadius

  • Návštěvník
  • Příspěvků: 57
Re: [C] hlavičkové soubory [vyřešeno]
« Odpověď #9 kdy: 15 Prosince 2010, 10:04:28 »
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 :)

 

Provoz zaštiťuje spolek OpenAlt.