Fehler abstellen
-
Hallo, ich bekomme bei einem meiner Projekte,
(genauer: ich teste einen von mir entworfenen Header der ein Template mit einer Variablen parameterliste verbindet und die übergebenen werte lass ich mit einer frei wählbaren definition von CODE behandeln) es ist aber eigentlich für die frage egal wofür jetzt genau.
folgende Warnungen:
var_tem.h:6:20: warning: extra tokens at end of #ifndef directive
var_tem.h:7:20: warning: ISO C requires whitespace after the macro nameich weiß nicht genau was sie bedeuten. Sie scheinen aber ohne folgen zu sein.
Weiß jemand was sie bedeuten und wie man sie abstellt(z.B. mit #pragma...)?
Ich benutze g++ unter gentoo-linux als compiler.
-
Wenn du uns var_tem.h zeile 6 und 7 zeigen wüdest könnten wir den "Fehler abstellen"
Kurt
-
*Kristalkugel rüberreich*
-
Storm.Xapek.de schrieb:
var_tem.h:6:20: warning: extra tokens at end of #ifndef directive
var_tem.h:7:20: warning: ISO C requires whitespace after the macro nameDer Compiler möchte am Ende der Datei eine Leerzeile haben. Deshalb die vermutlich Warnung.
-
Tschuldigung das es so lange gedauert hat musste arbeiten. (Muss schließlich auch mal sein
hier der Quellcode://var_tem.h //ein template mit Variabler Parameterliste //das auf werte eine selbstdefinierte funktion ausübt //Storm 2006 #ifndef inc_var_tem.h #define inc_var_tem.h //Für die Variable Parameterliste #include <cstdarg> #include <iostream> //maximal 100 werte #define buffer 100 using namespace std; #ifndef CODE #define CODE cout << "Keine Eigene Funktion für varTem definiert" << endl; #endif //#########################Das Template###########################// namespace storm { //eigener namespace aufmachen template <class T> T varTem(T end, T a, ...) { //Deklaration va_list argum_zeiger; //zeigt auf das jeweils nächste Argument short zaehler = 0; //zählt die Argumente T werte[buffer]; T rueckgabe; werte[zaehler] = a; //Jetzt die Werte auslesen und vergleichen va_start(argum_zeiger, a); while(werte[zaehler] != end) { //Schleife zu auslesen (letzter wert muss immer end sein) zaehler++; //zähler wird incrementiert werte[zaehler] = va_arg(argum_zeiger, T); //aktueller Wert wird in array gespeichert } va_end(argum_zeiger); //argum_zeiger wird auf NULL zurückgesetzt CODE return rueckgabe; //gröster wert wird zurückgegeben }; //Template zu } //eigener namespace zumachen #endif /*############################################################################ ## Anwendung ## ##Zu beachten sind folgende Dinge ## ## ## ## 1. mit "#define CODE" muss man ein macro erstellen das die gewünschte ## ## anweisungen auf die parameter ausübt. ## ## ## ## 1.2 dabei steht der array "werte" zur verfügung. ## ## dieser besitzt "zaehler" elemente(ohne das erste und das letzte) ## ## für return steht die Variable "rueckgabe" zur verfügung ## ## ## ## 2. das erste Argument muss auch das letzte sein ## ## ## ############################################################################*/ /*########################ein beispiel für main################################ #include <iostream> #define CODE \ short x = 0; \ int summe= 0; \ do { \ summe += werte[x]; \ x++; \ } while(werte[x] != werte[zaehler]);\ rueckgabe = summe / (zaehler) ; #include "var_tem.h" int main() { int a = -1, b = 2, c = 3, d= 4, e= -1; int rueckgabe; rueckgabe = storm::varTem(a,b,c,d,e); cout << rueckgabe; return 0; } #################################################################################*/
Weis nun jemand wie ich die Warnungen wegbekomme?
PS: Beide Warnungen haben etwas mit den Präprozessoren zu tun, aber da es nur warnungen sind seh ich das nicht so eng. Weiß denn niemand wie man sie einfach abstellt?
-
#ifndef inc_var_tem.h #define inc_var_tem.h
macht warnung
#ifndef inc_var_tem_h #define inc_var_tem_h
Fehler abgestellt
Kurt
-
Das hat geholfen Danke!!!!!!!!!!!!
Achja es steht natürlich jedem frei den Quelltext zu kopieren, ich glaube ein template mit variabler Parameterliste kann manchmal ganz nützlich sein.
-
va_list hat doch für Nicht-POD-Typen undefiniertes Verhalten, oder? Dann macht das keinen Spaß