mikrocontroller.net

Forum: Compiler & IDEs dynamische Warning


Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich versuche gerade, eine dynamische Warnung beim kompilieren mit GCC 
auszugeben, finde aber nichts zur Syntax. Geht das überhaupt?

Ich möchte erreichen, dass eine Konstante, die mit #define geschaffen 
wurde, in der Warning ausgegeben wird, also:
#define BLAHFASEL 123

#if BLAHBLUBB > 5
  #warning BLAHBLUBB is set > 5, <BLAHFASEL/BLAHBLUBB> is too high!
#endif

das in den dreieckigen Klammern soll vom Compiler/Preprocessor 
ausgewertet werden.

Vielleicht kann mir jemand kurz auf die Sprünge helfen.
(Hätte gerne anderweitig gesucht, aber mir fehlen passende Schlagworte)

Viele Grüße

hwonottobeseen

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Präprozessor rechnet nicht.

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist es dann zumindest möglich, die Werte nackt in der Warning 
auszugeben?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wohl nicht, da #warning nicht erst nach dem Textersatz ausgewertet wird.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Der Präprozessor rechnet nicht.

Tatsächlich?

http://www0.us.ioccc.org/2004/vik2.c

;)

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die spinnen doch :D

Gute Nacht.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Der Präprozessor rechnet nicht.
>
> Tatsächlich?
>
> http://www0.us.ioccc.org/2004/vik2.c

Was mag das bedeuten?

Sicher, es kann sein, daß es C-Compiler gibt, deren Präprozessoren 
gegenüber dem Standardfunktionsumfang erweitert sind, aber der 
Umkehrschluss, weil Compiler XY es kann, muss auch Compiler YZ es 
können, ist nicht zulässig.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der Präprozessor rechnet nicht.

Das hatten wir doch erst demletzt. Rechnet der Präpropzessor hier etwa 
nicht?
#include <stdio.h>
int main()
{
  #if 3*2 - 5 == 1
    printf("Foo\n");
  #else
    printf("Bar\n");
  #endif
  return 0;
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm. Da scheint ers zu tun, zugegeben. Macht das aber jeder 
Präprozessor?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann dir jezt grad keinen Paragraphen nennen. gcc -ansi -pedantic 
-Wall -Wextra beschwert sich jedenfalls nicht, Comeau online auch nicht.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:

> Hmm. Da scheint ers zu tun, zugegeben. Macht das aber jeder
> Präprozessor?

Ja. Im #if schon.

Aber wer mehr will, der sollte sich den m4 ansehen.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#if und Co sind ★Präprozessor★direktiven. Deswegen bearbeitet (und 
berechnet) die der ★Präprozessor★. Wenn man obiges Beispiel in 'plain C' 
umformuliert..
#include <stdio.h>
int main()
{
  if (3 *2 - 5 == 1)
    printf("Foo\n");
  else
    printf("Bar\n");
  
  return 0;
}

..dann rechnet der Präprozessor (natürlich) ★nichts★ aus, das übernimmt 
später der Compiler (respektiver dessen Optimierer). Insofern ist die 
Behauptung 'Der Präprozessor rechnet (nicht)' gleichzeitig richtig (er 
berechnet die Präprozessordirektiven) und falsch (er berechnet sonst nix 
im Quellcode, er macht nur Textersetzung).

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was aber laut Standard nicht funktioniert, ist sowas:
#define BUMMSFALLERA \
  #if 2 > 1 \
    #warn blabla \
  #endif

Die Probleme gabs schon mit #pragma, weshalb man _Pragma eingeführt hat.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.