Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C: Präprozessor für alle Header definieren??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.06.2005, 10:14 Uhr
Lola



Hallo ihrs!

Ich suche Hilfe bei einem "kleinen" Problem.
Ich möchte ein größeres Projekt programmieren.
Das heißt in mehrere Quellcodedateien und Header unterteilt.

Mein Problem ist, dass ich die Größe eines globalen Arrays: char Spielfeld[...][...]
mit Präprozessoren festlegen will.

Die Variable extern bekannt machen ist kein Problem.
Aber ich weiß nicht, wie das bei den Präprozessoren ist.
Ich zeig euch der einfachheithalber meinen "MAIN" Header.


C:

#if !defined (MAIN_H)
#define MAIN_H


#include <stdio.h>

// SO Funktioniert es natürlich NICHT!
#define extern ZEILE    6
#define extern SPALTE    7

// CSpielfeld extern bekannt geben
extern char cSpielfeld [ZEILE] [SPALTE];

#endif



Ich würde mich serh freuen, wenn mir jemand helfen könnte.
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2005, 11:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Mir ist Dein Problem nicht klar geworden: was geht denn nicht? Du musst dir einfach nur noch eine .c Datei nehmen und da dann die Definition reinsetzen. Also Header so lassen wie er ist und dann in einer .c Datei schreiben:

C++:
#include "main.h"

char cSpielfeild[ZEILE][SPALTE];


Der Präprozessor geht ja nur hin und macht textuelle ersetzungen, so daß dann da steht:

C++:
/** Das kommt aus dem header */
extern char cSpielfeld [6] [7]; // Deklaration

/** Das kommt aus der .c Datei */
char cSpielfeild[6][7]; // Definition


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2005, 12:21 Uhr
ao

(Operator)



Zitat von Lola:

C++:
// SO Funktioniert es natürlich NICHT!
#define extern ZEILE    6
#define extern SPALTE    7




Aber so:

C++:
#define ZEILE    6
#define SPALTE    7


Die Makros haben ihre Bedeutung nur während der *Übersetzungszeit*, d.h. sie müssen für jedes Modul neu gesetzt werden. Extern oder nicht extern gibts da nicht.

ao

Dieser Post wurde am 17.06.2005 um 12:21 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2005, 12:21 Uhr
Lola



*puuh*

Also...
Ich hab ein Spiel - will ein Spiel haben...

Das besteht aus mehreren Dateien.

In der main.h, die ich brauche, um zum Beispiel "Spielfeld" extern bekannt zu machen, kann ich doch die Präprozessoren nicht reinschreiben, oder?

Aber ich muss in der "main.c" eben diese Präprozessoren verwenden. Genauso, wie in allen anderen c-Dateien, wenn ich was mit Spielfeld machen will.


Die Spielfeldgröße ...[ZEILE][SPALTE] soll eben vordefiniert sein. Wegen einfacherer Änderung.
Und in einer Gewinnüberprüfung will ich das Spielfeld absuchen, und die For-Schleife mit den Präprozessoren begrenzen.

C::

for ( i = 0 ; i < ZEILE ; i++ )
{
      //hier passiert irgendwas
}



An dieser Stelle kennt der Kompiler ZEILE aber nicht mehr.


Ich hoffe, ich hab das jetzt nicht völlig konfus ausgedrückt...
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2005, 12:23 Uhr
Lola




Zitat von ao:


C++:
#define ZEILE    6
#define SPALTE    7


Die Makros haben ihre Bedeutung nur während der *Übersetzungszeit*, d.h. sie müssen für jedes Modul neu gesetzt werden. Extern oder nicht extern gibts da nicht.

ao




Also muss ich in jedem Header die defines nochmal reinschreiben?
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.06.2005, 12:25 Uhr
Tommix



Hallo,
@virtual: Lola hat extern umdefiniert, und das gleich zweimal.
@Lola: Einfach nur

C++:
#define ZEILE    6
#define SPALTE    7



Gruß, Tommix


Bearbeitung von Tommix:
Diesmal war ich aber echt viel zu langsam.

Dieser Post wurde am 17.06.2005 um 12:27 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.06.2005, 12:30 Uhr
Tommix




Zitat von Lola:
Also muss ich in jedem Header die defines nochmal reinschreiben?

Nein, aber Du mußt in jeder Datei, in der Du die Konstanten verwenden willst, den Header mit den #defines per #include einbinden.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.06.2005, 13:21 Uhr
Lola



AHHH!!

Ok!

Quasi, der Kompiler ersetzt in der main.h ZEILE durch die sieben und merkt sich das dann für den Rest des Programmes?


DANKE!!!!
--
The more you study - The more you know
The more you know - The more you forget
The more you forget - The less you know

Why study!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.06.2005, 13:50 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Nein, er merkt sich das für den Rest der Übersetzungseinheit!

Es gibt Compiler, die jede Datei als eine Einheit übersetzen (z.B. BCC). Letzendlich sollte es einfach einen, einen globalen Header zu verwenden, wo die defines drinstehen, und diesen einfach in jede Datei einzubinden, die ihn braucht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: