Include .c souboru se nepřeloží

Manheim

Re:Include
« Odpověď #15 kdy: 24. 08. 2017, 23:23:12 »
To spíš vyrazí dřív oni mne  ::)
když si vezmu, že jsem práci hledal půl roku..to tady snad rok vydržim a vrhnu se na svoje vlastní podnikání nebo to zkusim v Německu i s podnikáním. Víc mne zajímají průmyslové regulátory a měření, takže chci jít vlastním vývojem embedded pro regulátory, tak uvidíme co bude :)


BrainLess

Re:Include
« Odpověď #16 kdy: 24. 08. 2017, 23:23:23 »
No ..to je docela matlanec :)
1) v .c souboru neoptrbeujes explicitne deklarovat fci soucet, kdyz tam includujes .h soubor, ktery ji deklaruje(toto nezpusobuje chybu)

2) nezkousel jsem to, ale chybu ti blije zrejme linker, protoze linkuje jak zkompilovany .c soubor, ktery obsahuje definici fce soucet, tak zkompilovany main soubor, ktery obsahuje opet definici stejne funkce soucet(a to proto ze jsi ji tam includnul). Teoreticky by to asi fungovalo, kdybys kompiloval a linkoval pouze main soubor.
   2a) Nic proti, vim, ze to tak delaji ti lulini kde pracujes, ale tohle je na lamani hnatu. Nejsou to nahodou Indove?

.c soubory se nikdy neincluduji(skoro nikdy.. je to prasarna, nedela se to, pokud se includuji nekde primo definice, tak se pojmenovavaji jinak(.inc, nebo tak)

Predstav si, ze pri  #include se stane to, ze preprocesor vezme soubor, ktery ten include specifikuje a pastne ho misto toho include. Takze obsah .c je v miste include. Ale ty zkompilujes a slinkujes jak .c tak main. A v obou mas definici funkce soucet se stejnou hlavickou a ve stejnem namespacu. Linker pak nevi co s tim, protoze nevi kterou z nich ma pouzivat, nicim se nelisi jejich hlavicka a on je nedokaze rozeznat.

Ne zrejme ale zcela jiste linker protoze => ld returned 1 exit status

Re:Include
« Odpověď #17 kdy: 25. 08. 2017, 00:52:13 »
Citace
.cpp píšu v notepadu

LOL! To jako vážně???

To se přeci nedá, takhle ten rok bez následků nevydržíte...

.

Re:Include
« Odpověď #18 kdy: 25. 08. 2017, 03:05:13 »
Include prostě na to místo vloží obsah daného souboru. Takovou PÍČ*VINU KU*VA nevíš?! Když to někdo někde používá na inkludovaní definic, tak k tomu asi má důvod. A ty z toho brečíš, žes to ještě neviděl. Najdi si jinou práci.

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Include
« Odpověď #19 kdy: 25. 08. 2017, 07:28:00 »
Díky za response. Jde o to, že já to píšu opravdu jinak, prostě prototyp do .h souboru a vlastní funkci do .c souboru. jenže tady kde dělám do toho píšou francouzi, tunis a ještě další dva teamy a každý to píše jinak. Což pak dělá tyhle problémy.
Já si sestavil svuj vlastní program, ten je následující.

funkce.h

Kód: [Vybrat]
#ifndef FUNKCE_H
#define FUNKCE_H


int soucet(int a, int b);


#endif

soucet.c

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>
#include "funkce.h"

int soucet(int a, int b);

int soucet(int a, int b) {
   
  int sum;

sum = a + b; 
   
return sum;

};

main.c

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>

#include "soucet.c"

int main(int argc, char** argv) {
   
    printf("%i\n", soucet(2, 2));
   
    return 0;
}

hlášky, co i vypíše gcc do terminálu:

/tmp/ccdth71N.o: In function `soucet':
soucet.c:(.text+0x0): multiple definition of `soucet'
/tmp/ccztTNY3.o:main.c:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

Jak říkám, já jsem zvyklý psát knihovny jinak, takže v tom teď docela plavu v práci...

V ukázce chyběly názvy souborů, takže jsem podle kontextu doplnil funkce.h, soucet.c a main.c. GCC 6.3 v Debianu 9 to přeložil bez řečí. Ve Windows GCC nemám.



Ladislav Michl

Re:Include
« Odpověď #20 kdy: 25. 08. 2017, 08:46:58 »
Není důvod, aby mělo GCC řeči. Problém nastane až když mu předhodíte jako zdrojový soubor jak soucet.c, tak main.c, jako to vyplývá z původní chybové hlášky.

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Include
« Odpověď #21 kdy: 25. 08. 2017, 12:13:07 »
Není důvod, aby mělo GCC řeči. Problém nastane až když mu předhodíte jako zdrojový soubor jak soucet.c, tak main.c, jako to vyplývá z původní chybové hlášky.
Máte pravdu, tak to mohlo být. Tazatel bohužel nebyl dost konkrétní.

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Include
« Odpověď #22 kdy: 25. 08. 2017, 12:38:34 »
Tak nevím, jestli se mám smát, nebo brečet. Větší blbost už jsem dlouho neviděl.
Ale když už to vidím, tak se zeptám - proč nepoužíváte #pragma once ?