#define für Datentypen?

Gast #1476178
Lesenswert?

Ich versuche bestehenden Code in ein Programm von mir einzubinden und 
bekomme jede Menge Fehler beim Compilieren. Deshalb mal eine 
grundsätzliche Frage:

Ist es möglich, mit
1
#define MeinDatentypName uint8_t
einen anderen Namen für den Datentyp zu erzeugen und dann mit
1
MeinDatentypName meineVariable;
Variablen zu erzeugen? Das wird im bestehenden Code nämlich so gemacht, 
wahrscheinlich um eine bessere Portabilität zu erreichen für andere 
Compiler, wo die Datentypen anders heissen. Ich habe aber das Gefühl, 
dass es ein grundsätzliches Problem damit gibt.

Grüsse

Martin
#1476191
Lesenswert?

Martin schrieb:

> Ist es möglich, mit
>
>
1
#define MeinDatentypName uint8_t
> einen anderen Namen für den Datentyp zu erzeugen und dann mit
>
>
1
MeinDatentypName meineVariable;
> Variablen zu erzeugen?

Möglich ist es schon.
Aber das sollte man eigentlich nicht tun.
Genau dafür gibt es den typedef

Anders als #define berücksicht nämlich der typedef auch die C-Regeln. 
#define veranlasst lediglich Textersetzungen

zb
1
#define CHAR_PTR   char *
2

3
int main()
4
{
5
  CHAR_PTR a, b;
6
}
welche Datentypen haben a bzw. b?

1
typedef char * Char_Ptr;
2

3
int main()
4
{
5
  Char_Ptr a, b;
6
}
Welche Datentypen haben a und b jetzt?

Welche Variante davon ist logischer und welche ist für Überraschungen 
gut?
Gast #1476276
Lesenswert?

> Was bringt dich zu diesem Gefühl?

Weil jeweils auf den Zeilen, wo dann eine Variable so erzeugt wurde, ein 
Fehler geworfen wurde. Wie wenn der Compiler nicht wüsste, was 
MeinDatentypName ist.

Den Code habe ich jetzt nicht hier, und er ist insgesamt auch viel zu 
umfangreich um den ganzen zu posten, wenn Ausschnitte davon helfen kann 
ich später was posten.

Wenn das grundsätzlich funktionieren sollte (wenn ich auch glaube dass 
es nicht schön ist) muss der Fehler wohl woanders liegen.
#1476339
Lesenswert?

Martin schrieb:
>> Was bringt dich zu diesem Gefühl?
>
> Weil jeweils auf den Zeilen, wo dann eine Variable so erzeugt wurde, ein
> Fehler geworfen wurde. Wie wenn der Compiler nicht wüsste, was
> MeinDatentypName ist.

Dann wird dort wahrscheinlich der Include fehlen, in dem die #define 
enthalten sind.

> Den Code habe ich jetzt nicht hier, und er ist insgesamt auch viel zu
> umfangreich um den ganzen zu posten, wenn Ausschnitte davon helfen kann
> ich später was posten.

Als Anfang wäre ein *.c File, das den Fehler zeigt hilfreich. 
Interessant ist der Anfang bis zum ersten derartigen Fehler.

Richte dein besonderes Augenmerk auf irgendwelche Include. Insbesondere 
interessiert mich, wo die #define für die Datentypen herkommen. 
Sinnvollerweise wird man diese #define in einem Header File sammeln und 
das dann überall dort #includ-en, wo es benötigt wird.

Achte auch darauf, ob du nicht zufällig bei deinen eigenen Include Files 
eines dabei hast, das den gleichen Namen hat, wie dasjenige Include mit 
den #define.
#1476347
Lesenswert?

Edit:

Es gibt natürlich auch noch die Möglichkeit, dass der 
Originalprogrammierer, die #define für die Datentypen im makefile hat, 
und diese per Command Line Switch an den Compiler übergibt.

Wenn er das getan hat, solltest du gleich mal den nassen Fetzen richten 
um ihn ihm um die Ohren zu schlagen.

Aber so richtig mag ich nicht daran glauben. Wahrscheinlich fehlt 
einfach nur ein #include mit der richtigen Datei.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren