"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Problem bei globaler Variable in C

mr.q.c 22.08.2004 - 17:17 682 9
Posts

mr.q.c

Bloody Newbie
Registered: Apr 2003
Location: Austria
Posts: 10
Hi Leute!

Ich habe ein Problem. Vereinfacht ausgedrückt:
Ich möchte folgendes Programm kompilieren (h1 bzw c1 ist das Hauptprogramm
und greift auf eine Funktion in h2 bzw c2 zu)

h1.1:
#ifndef h1
#define h1

#include "h2.h"

int i;

#endif

===========
c1.cpp:
#include "h1.h"

int main()
{
i = 1;
return foo();
}

===========
h2.h:
#ifndef h2
#define h2

#include "h1.h"

int foo();

#endif

===========
c2.cpp
#include "h2.h"

int foo()
{
return i;
}

... WO LIEGT DA DAS PROBLEM?
Den Linker hauts immer auf.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
habs mir nicht so genau angeschaut.. allerdings eines kann ich dir sagen: so, und am besten gar nicht, hantiert man nicht mit globalen variablen.

btw. das problem liegt sicher an den include guards.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Du musst die Variable extern deklarieren. Diese Frage stellt beinahe jeder C Anfänger, man könnte also sagen, es ist eine FAQ.

Geigerzeiger

Addicted
Registered: Jan 2004
Location: anywhere
Posts: 449
ok ich würds so machen:

Code:
h1.h:

#ifndef h1
#define h1

extern int i;   // Verweis auf i in c1.cpp

#endif

===========
c1.cpp:
#include "h1.h"    // Variable
#include "h2.h"    // Funktion

int i;         // Setz ich, da h1.h auf diese verweist

int main()
{
    i = 1;
    return foo();
}

===========
h2.h:
#ifndef h2
#define h2

extern int foo();    // in c2.cpp vorhanden

#endif

===========
c2.cpp
#include "h1.h"      // Dekl. für Variable
#include "h2.h"      // Dekl. für Funktion

int foo()
{
    return i;
}
^

/edit:
Es würde auch eine header reichen wo du die 2 verweise reintust.
Bearbeitet von Geigerzeiger am 22.08.2004, 19:04

mr.q.c

Bloody Newbie
Registered: Apr 2003
Location: Austria
Posts: 10
Danke für die Antworten!

Zu meiner verteidigung und meiner schande muss ich gestehen, dass ich auf kein anfänger in C bin. Nur habe ich seit 4 Jahren keine Zeile C mehr programmiert. Hab mich aber jetzt in ein neues Thema in der Programmierung eingearbeitet und dazu eignet sich C am besten.

HaBa

Legend
Dr. Funkenstein
Avatar
Registered: Mar 2001
Location: St. Speidl / Gle..
Posts: 19729
"Pro globaler Variable eine Watschn" als Aussage meines damaligen EDV-Professors hat sich bei mir GSD tief genug eingebrannt :D

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Zitat von HaBa
"Pro globaler Variable eine Watschn" als Aussage meines damaligen EDV-Professors hat sich bei mir GSD tief genug eingebrannt :D

rofl :D

dann müssten wir unsren lehrern schon ein paar verpasst haben, manchmal gehts hald leider ned ohne, bzw is es vieeeeeel angenehmer :D

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
Zitat von moidaschl
rofl :D

dann müssten wir unsren lehrern schon ein paar verpasst haben, manchmal gehts hald leider ned ohne, bzw is es vieeeeeel angenehmer :D

das geht net ohne kann man net gelten lassen. die wenigen spezialfaelle in denen du wirklich globale variablen brauchst hast du noch net kennengelernt ;)

btw: wenn du C programmierst wieso nennst du die files .cpp? ;)

Geigerzeiger

Addicted
Registered: Jan 2004
Location: anywhere
Posts: 449
im prinzip sollte man src files mit .c versehen wenn die standard ANSI-C library verwendet wird und keine zeile c++ vorhanden ist.

Aber imho is ma des zimli wurscht ! :D

btw. man sollte alle vars/objekte mit watches versehen und in den entsprechenden zeilen breakpoints setzen.

mr.q.c

Bloody Newbie
Registered: Apr 2003
Location: Austria
Posts: 10
Zu der frage warum cpp-ext und nicht c!

Das einarbeitungsprojekt das ich gerade angefangen habe wird mit C angefangen, brauche dann im weiteren verlauf C++ d.h. OOP und wird daher von anfang an mit einem c++-comp übersetzt. wegen der einheitlichen form ".cpp"
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz