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 name

    ich 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 name

    Der 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ß 🙂


Anmelden zum Antworten