Forum: Compiler & IDEs #include von #define


von Vanillacoke (Gast)


Lesenswert?

Servus,

ich habe in meiner main.c eine Periodenlänge definiert mit:
1
#define period_length 19000

diese möchte ich nun zentral verfügbar machen um sie auch in anderen .c 
Dateien nutzen zu können.

also habe ich diese Zeile in eine sample.h "exportiert" und diese datei 
mit #include includiert.

Leider reagiert der Compiler auf diesen Versuch mit folgender 
Fehlermeldung:
1
'period_length' undeclared (first use in this function)

ich kann mir nicht erklären weshalb dieser Fehler auftaucht und wie ich 
das zentrale Verfügbarmachen eines Integerwerts anders funktionieren 
soll.

ein kleiner Schubs in die richtige Richtung wäre super nett.

Mfg Vanilla

von Oliver (Gast)


Lesenswert?

Da du keinen Code zeigst, verrät mit meine Glaskugel lediglich, daß da 
etwas verkehrt sein muss.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Vanillacoke schrieb:

> also habe ich diese Zeile in eine sample.h "exportiert" und diese datei
> mit #include includiert.

Wo genau?

(Soll heißen: Zeig den Code und beschreibe ihn nicht. Du übersiehst 
etwas, das kann ein ganz banaler Tippfehler sein, das kann aber auch 
mehr sein. Wenn du ihn übersiehst, irgendwer anderer hier wird ihn 
sehen. Beliebt ist zb bei 'length' das t und das h unabsichtlich zu 
vertauschen).

> Leider reagiert der Compiler auf diesen Versuch mit folgender
> Fehlermeldung:
>
1
'period_length' undeclared (first use in this function)

dann hat er auch den #define nicht gesehen, ehe 'period_length' das 
erste mal benutzt wurde.

> ich kann mir nicht erklären weshalb dieser Fehler auftaucht und wie ich
> das zentrale Verfügbarmachen eines Integerwerts anders funktionieren
> soll.

Die grundsätzliche Vorgehensweise scheint ok zu sein. Du hast dich 
irgendwo in den Details verheddert. Also zeig den Code.

von Vanillacoke (Gast)


Lesenswert?

Der Grund dafür dass ich keinen Code poste liegt daran, dass ich diesen 
Versuch natürlich nicht an meinem Projekt getestet habe sondern ein 
neues Projekt erstellt habe um mich der Thematik langsam zu nähern.

In der sample.h existiert also nur die eine #define Zeile welche keine 
Fehler enthalten kann da ich sie 1zu1 in die main.c kopieren kann um den 
Fehler zu beseitigen.
In der main.c gibt es auch nur die main Methode welche versuchshalber 
eine Division der period_length mit 10 durchführt und das Ergebnis einer 
localen Variable zuweist und anschließend terminiert.

die #include "sample.h" befindet sich natürlich vor der main Methode 
zusammen mit der #include <avr/io.h>

aber hier, zum besseren Überblicken der Umstände, der gesamte Code 
beider Dateien:

sample.h
1
#define period_length 19000

main.c
1
#include <avr/io.h>
2
3
#include "sample.h"
4
5
6
7
int main(void) 
8
{
9
    int x = period_length / 10;
10
  return 0;      
11
}

Ich verwende dabei das Programmer's Notepad mit einem, auf meinen 
ATMega8 konfiguriertem, Makefile. Vielleicht hilft das auch noch.

Vielen dank für eure Mühen

MFG Vanilla

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Versuch, mal einen Zeilenumbruch ans Ende der sample.h zu setzen, 
vielleicht ist da irgendwas kaputt.
Ansonsten stell mal sicher, dass exakt diese sample.h eingebunden 
wird, z.B. durch Einfügen der Zeile
1
#warning "blablubb"
 in die sample.h - wenn dann beim compilieren nicht diese Nachricht 
ausgegeben wird, erwischt der Compiler die falsche Datei.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sieht soweit ok aus. Es sei denn du hast mehrer Versionen von sample.h 
hier und da und nimmst das falsche.

Du kannst auch zusätzlich die Optionen -g3 -save-tamps angeben und ins 
erzeugte i-File schauen, da steht dann drinne von wo das include kommt 
und wie die Makros auflösen.

von Vanillacoke (Gast)


Lesenswert?

Ah! Durch einen Fehler in meiner Versionsverwaltung wurden die 
Änderungen im Programmer's Notepad statt in der sample.h in einer 
Konfliktdatei gespeichert. Welch ein dummer Fehler. Vielen Dank für den 
nötigen Schubser.

Sehr nette Hilfe.

Mfg Vanilla

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.