Forum: Compiler & IDEs dynamische Warning


von hownottobeseen (Gast)


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:
1
#define BLAHFASEL 123
2
3
#if BLAHBLUBB > 5
4
  #warning BLAHBLUBB is set > 5, <BLAHFASEL/BLAHBLUBB> is too high!
5
#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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Präprozessor rechnet nicht.

von hownottobeseen (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

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

Tatsächlich?

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

;)

von hownottobeseen (Gast)


Lesenswert?

die spinnen doch :D

Gute Nacht.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Rolf Magnus (Gast)


Lesenswert?

> Der Präprozessor rechnet nicht.

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


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.

von g457 (Gast)


Lesenswert?

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

..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).

von Sven P. (Gast)


Lesenswert?

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

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

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.