Problém s #include – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s #include – C / C++ – Fórum – Programujte.comProblém s #include – C / C++ – Fórum – Programujte.com

 

Boblig0
Newbie
25. 5. 2022   #1
-
0
-

Mám header soubor, který mám naincludovaný ve více c modulech překlad padá na chybě "multiple definition of ...: first defined here"  přitom mám použitou direktivu:

#ifndef INC_KONSTANTY_H_
#define INC_KONSTANTY_H_
...
#endif

takže bych očekával, že se inkluze provede jen jednou a pak další bude přeskočena, ale nefunguje to.  

Nahlásit jako SPAM
IP: 176.98.110.–
gna
~ Anonymní uživatel
1698 příspěvků
25. 5. 2022   #2
-
0
-

V C se soubory kompilují po jednom a jen v rámci té jedné kompilace existují definy.

Takže ten "include guard" bude fungovat v takovéto situaci: 

== core.h:
struct core {
	int foo;
};

== utils.h
#include "core.h"

struct helper {
	struct core core;
	int bar;
}

== main.c
#include "core.h"
#include "utils.h"

======
Guardem se zabrání dvojitému includu "core" do Main.

Ale ne v této situaci: 

== core.h
struct core {
	int foo;
};

struct core main_core;  // !!!

== utils.c
#include "core.h"

== main.c
#include "core.h"

======
Utils a Main se kompilují nezávisle a v obou bude stejná definice.

Zkrátka, jestli tam máš nějaké definice, tak je vyhoď do .c a v tom .h nech jen deklarace.

== neco.c
int odpoved = 42;

== neco.h
extern int odpoved;
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1698 příspěvků
25. 5. 2022   #3
-
0
-

Ty příklady jsem napsal dost blbě :) Ale závěr platí.

Nahlásit jako SPAM
IP: 213.211.51.–
1. 6. 2022   #4
-
0
-

Thank you

Nahlásit jako SPAM
IP: 2405:9800:b930:7bfa:5411:7d71:6334:3526...–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Podobná vlákna

Problem s INCLUDE — založil Dominik Franěk

Problém z include. — založil w3q

Problém z include — založil bububu

Problém s include — založil killermax

Problém s #include "FTCSPI.h" — založil hlucheucho

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý