URL: https://www.overclockers.at/coding-stuff/problem_bei_globaler_variable_in_c_122610/page_1 - zur Vollversion wechseln!
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.
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.
Du musst die Variable extern deklarieren. Diese Frage stellt beinahe jeder C Anfänger, man könnte also sagen, es ist eine FAQ.
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; }
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.
"Pro globaler Variable eine Watschn" als Aussage meines damaligen EDV-Professors hat sich bei mir GSD tief genug eingebrannt 
Zitat von HaBa"Pro globaler Variable eine Watschn" als Aussage meines damaligen EDV-Professors hat sich bei mir GSD tief genug eingebrannt


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


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 ! 
btw. man sollte alle vars/objekte mit watches versehen und in den entsprechenden zeilen breakpoints setzen.
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"
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026