Makro & static. Was macht diese Funktion?.



  • Hallo folgende Funktion.

    Ich weis die Funktion ist ziemlich scheiße ich werde sie umschreiben … irgendwann wenn ich mehr zeit habe … irgendwann.

    #define DEFINE_ARRAY1DRWSIZE(T, Z, U, unique)\
    	Z Array1DRWSize##unique(T *GiveMySize, Z SetNewData, U MODE)\
    	{\
    		/*Dhlosh Metablhton*/\
    		static Z SavedSize = 0;\
    	/**/\
    			/*Kurio Programma*/\
    		switch(MODE)\
    		{\
    			case wREAD:\
    			{\
    				return SavedSize;\
    				break;\
    			}\
    			case wWRITE:\
    			{\
    				SavedSize = SetNewData;\
    				return ZERO;\
    				break;\
    			}\
    			default:\
    			{\
    				printf("!!!FATAL ERROR!!! ##__LA8OS MODE to PRogramma mas termatizei edw.\n");\
    				exit(EXIT_FAILURE);\
    			}\
    		}\
    		printf("!!!FATAL ERROR!!! ##__FILE__## 000 000. La8os MODE h malon oute egw den ksero th egine.\n");\
    		exit(EXIT_FAILURE);\
    	}
    DEFINE_ARRAY1DRWSIZE(short int, long int, sts, _short);
    DEFINE_ARRAY1DRWSIZE(unsigned short int, long int, sts, _usi);
    DEFINE_ARRAY1DRWSIZE(int, long int, sts, _int);
    DEFINE_ARRAY1DRWSIZE(unsigned int, long int, sts, _ui);
    DEFINE_ARRAY1DRWSIZE(long int, long int, sts, _li);
    DEFINE_ARRAY1DRWSIZE(unsigned long int, long int, sts, _uli);
    DEFINE_ARRAY1DRWSIZE(double, long int, sts, _double);
    DEFINE_ARRAY1DRWSIZE(float, long int, sts, _float);
    DEFINE_ARRAY1DRWSIZE(long double, long int, sts, _ld);
    DEFINE_ARRAY1DRWSIZE(char, long int, sts, _char);
    
    //Gia ta arxeip BasicSetArray
    #ifdef __BASICSETFUNKTION__
    	DEFINE_ARRAY1DRWSIZE(pList_char, long int, sts, _pList_char);
    	DEFINE_ARRAY1DRWSIZE(pList_double, long int, sts, _pList_double);
    	DEFINE_ARRAY1DRWSIZE(pList_float, long int, sts, _pList_float);
    	DEFINE_ARRAY1DRWSIZE(pList_int, long int, sts, _pList_int);
    	DEFINE_ARRAY1DRWSIZE(pList_ld, long int, sts, _pList_ld);
    	DEFINE_ARRAY1DRWSIZE(pList_li, long int, sts, _pList_li);
    	DEFINE_ARRAY1DRWSIZE(pList_si, long int, sts, _pList_si);
    	DEFINE_ARRAY1DRWSIZE(pList_uli, long int, sts, _pList_uli);
    	DEFINE_ARRAY1DRWSIZE(pList_usi, long int, sts, _pList_usi);
    #endif
    

    Bekomme ich jetzt wenn für jeden datentyp eine eigene Statik variable?. Und wenn nicht was kann ich machen damit ich das bekomme, ohne jede Funktion Einzel zu programmieren. Und das was mich noch intresirt was kann ich machen damit ich unendlich (naja) so viele wie ich brauche Statik Funktion. mit denn gleichen dypen parameter?.

    Ah ja noch eins funktioniert eigentlich das mit #ifdef wenn ich später die Bibliothek BasicSetFunktion.h nicht mehr benutze?.

    Ja und noch wieso funktioniert eigentlich nie ##__FILE__## ich bekomme in stdout immer ##__FILE__## ausgedruckt. Obschon ich <assert.h> benutze



  • Master User schrieb:

    Bekomme ich jetzt wenn für jeden datentyp eine eigene Statik variable?

    Ja, schliesslich definierst du für jeden Datentyp auch eine eigene Funktion. static Variablen innerhalb Funktionen haben zwar static Lebensdauer (welch Überraschung), sind bezogen auf ihren Scope dennoch lokal.
    Wo steht eigentlich dein Code? In einer Header-Datei? Dann pass auf, dass du keine Mehrfachdefinition baust, das geht ganz schnell.
    Schau dir diesbzgl. mal inline an, oder trenne sauber mit Definition in .c und Deklaration in .h.

    Master User schrieb:

    Und das was mich noch intresirt was kann ich machen damit ich unendlich (naja) so viele wie ich brauche Statik Funktion. mit denn gleichen dypen parameter?

    Versteh ich nicht. Kannst du das nochmal in Deutsch formulieren?

    Master User schrieb:

    Ah ja noch eins funktioniert eigentlich das mit #ifdef wenn ich später die Bibliothek BasicSetFunktion.h nicht mehr benutze?

    Bibliothek BasicSetFunktion.h?
    .h Dateien sind normalerweise Header-Dateien. Und der Präprozessor bearbeitet #ifdef selbstverständlich nur dort, wo du die Header-Datei einbindest (#include).

    Master User schrieb:

    Ja und noch wieso funktioniert eigentlich nie ##__FILE__## ich bekomme in stdout immer ##__FILE__## ausgedruckt.

    ## funktioniert mit String Literalen so nicht, und erst recht nicht IN String Literalen. Dort sind sie genauso normale Zeichen wie die Restlichen auch, dito mit deinen Bezeichnern. Versuchs mal so

    printf("!!!FATAL ERROR!!! " __FILE__ " 000 000. La8os MODE h malon oute egw den ksero th egine.\n");
    


  • groovemaster schrieb:

    printf("!!!FATAL ERROR!!! " __FILE__ " 000 000. La8os MODE h malon oute egw den ksero th egine.\n");
    

    Ich nehm' mal an, du meinst:

    printf("!!!FATAL ERROR!!! %s 000 000. La8os MODE h malon oute egw den ksero th egine.\n", __FILE__);
    


  • Wieso? Das verschwendet nur Rechenzeit.



  • Ups, ja 🙄



  • Ich denke,

    puts("!!!FATAL ERROR!!! " __FILE__ " 000 000. La8os MODE h malon oute egw den ksero th egine.");
    

    Wär in diesem Fall noch ne Ecke sinnvoller.


Anmelden zum Antworten