"sinnlose" defines?



  • Arcoth schrieb:

    Ganz im Gegenteil, die bemühen sich den Code lesbar zu halten. Schließlich müssen sie ihn doch warten. Alles was Lesbarkeit vermindert ist nötig.

    Echt? Findest du sowas hier lesbar? Also ich find das zum kotzen 😃

    Vor allem macht sowas wie #define TRY try auch überhaupt keinen Sinn, warum verwendet man nicht einfach die Schlüsselwörter dies schon gibt? So "verschmutzt" man alles nur völlig unnötig mit Macros für 0 Mehrwert...

    EDIT:
    Lol, TyRoXx ist mir da mit einem Beispiel zuvorgekommen^^

    void __CLR_OR_THIS_CALL _Copy(size_type _Newsize, size_type _Oldlen)
    		{	// copy _Oldlen elements to newly allocated buffer
    		size_type _Newres = _Newsize | _ALLOC_MASK;
    		if (max_size() < _Newres)
    			_Newres = _Newsize;	// undo roundup if too big
    		else if (_Newres / 3 < _Myres / 2
    			&& _Myres <= max_size() - _Myres / 2)
    			_Newres = _Myres + _Myres / 2;	// grow exponentially if possible
    		_Elem *_Ptr = 0;
    
    		_TRY_BEGIN
    			_Ptr = _Mybase::_Alval.allocate(_Newres + 1);
    		_CATCH_ALL
    			_Newres = _Newsize;	// allocation failed, undo roundup and retry
    			_TRY_BEGIN
    				_Ptr = _Mybase::_Alval.allocate(_Newres + 1);
    			_CATCH_ALL
    			_Tidy(true);	// failed again, discard storage and reraise
    			_RERAISE;
    			_CATCH_END
    		_CATCH_END
    
    		if (0 < _Oldlen)
    			_Traits_helper::copy_s<_Traits>(_Ptr, _Newres + 1, _Myptr(), _Oldlen);	// copy existing elements
    		_Tidy(true);
    		_Bx._Ptr = _Ptr;
    		_Myres = _Newres;
    		_Eos(_Oldlen);
    		}
    


  • happystudent schrieb:

    Echt? Findest du sowas hier lesbar? Also ich find das zum kotzen 😃

    Ich finde das auch nicht schön, ist aber auch Gewohnheitssache.
    Die kurzen Bezeichner sind z.B. ziemlich sicher absicht, einfach um Platz und dadurch auch automatisch Compilezeit zu sparen.
    Evtl. ist das (Compilezeit sparen) auch der Grund für "fehlende" {} wo es auch ohne {} erlaubt ist.

    happystudent schrieb:

    Vor allem macht sowas wie #define TRY try auch überhaupt keinen Sinn, warum verwendet man nicht einfach die Schlüsselwörter dies schon gibt? So "verschmutzt" man alles nur völlig unnötig mit Macros für 0 Mehrwert...

    Wieso bist du dir so sicher dass die Makros für try/catch überhaupt keinen Sinn haben?



  • Naja. Bei #define INT int habe ich auch keine Ahnung was das soll. Ein Sinn sehe ich da nicht direkt. Da frage ich mich warum man da sich nicht auf den Standard beruft oder einen Typ definiert wie

    #ifdef GCC32
      #define INT int
    #elif GCC64
      #define INT short
    #elif CLANG
      #define INT long
    // ...
    #endif
    

    Ich kenn auch den Trick mit defines Code zu portieren. Unter Compiler XYZ existiert HUGE Pointer. Um es für GCC zu nutzen definiert man #define HUGE.



  • hustbaer schrieb:

    Wieso bist du dir so sicher dass die Makros für try/catch überhaupt keinen Sinn haben?

    Naja... also ich sehe zumindest auch nach längerem Überlegen keinen Sinn darin.

    Das _TRY_BEGIN ist einfach nur try{ , das _CATCH_END ist } - das ist potentiell ja noch eine Einladung für Klammerfehler und was das gegenüber einem normalen try-catch bringen soll weiß ich nicht.

    Außerdem erhöht es ja auch noch die Compile- bzw. die Präprozessier-Zeit.



  • happystudent schrieb:

    hustbaer schrieb:

    Wieso bist du dir so sicher dass die Makros für try/catch überhaupt keinen Sinn haben?

    Naja... also ich sehe zumindest auch nach längerem Überlegen keinen Sinn darin.

    Das _TRY_BEGIN ist einfach nur try{ , das _CATCH_END ist } - das ist potentiell ja noch eine Einladung für Klammerfehler und was das gegenüber einem normalen try-catch bringen soll weiß ich nicht.

    Außerdem erhöht es ja auch noch die Compile- bzw. die Präprozessier-Zeit.

    Es ist eventuell möglich, dass man den Code auch vollständig ohne Exception Handling kompilieren kann, er aber dennoch bei aktivierten Exceptions diese sinnvoll behandelt. Ich wäre vorsichtig damit, so etwas pauschal als sinnlos abzutun.

    Finnegan



  • Finnegan schrieb:

    happystudent schrieb:

    hustbaer schrieb:

    Wieso bist du dir so sicher dass die Makros für try/catch überhaupt keinen Sinn haben?

    Naja... also ich sehe zumindest auch nach längerem Überlegen keinen Sinn darin.

    Das _TRY_BEGIN ist einfach nur try{ , das _CATCH_END ist } - das ist potentiell ja noch eine Einladung für Klammerfehler und was das gegenüber einem normalen try-catch bringen soll weiß ich nicht.

    Außerdem erhöht es ja auch noch die Compile- bzw. die Präprozessier-Zeit.

    Es ist eventuell möglich, dass man den Code auch vollständig ohne Exception Handling kompilieren kann, er aber dennoch bei aktivierten Exceptions diese sinnvoll behandelt. Ich wäre vorsichtig damit, so etwas pauschal als sinnlos abzutun.

    Das.
    Nur weil du jetzt keine sinnvolle Ersetzung für die Makros nicht, heißt das nicht, dass da nicht eventuell eine hinkommt.
    Das ist ja gerade der Sinn von solchen Abstraktionen, man kann später andere Dinge ersetzen.
    In diesem Fall Exceptionhandling ändern.



  • Oder noch eine Idee: vielleicht könnte man die Dinger für Unit-Tests oder Coverage-Tests verwenden.
    Frag mich jetzt nicht wie genau das aussehen könnte, aber es geht eben darum was Nathan schon geschrieben hat: Nur weil kein offensichtlicher Nutzen erkennbar ist, kann man nicht automatisch annehmen dass etwas total sinnlos ist.

    ps: Des Rätsels Lösung:

    // xstddef (MSVC 2013)
    // ...
     #else /* _HAS_EXCEPTIONS */
     #define _TRY_BEGIN	{{
     #define _CATCH(x)	} if (0) {
     #define _CATCH_ALL	} if (0) {
     #define _CATCH_END	}}
     #if defined(_DEBUG)
      #define _RAISE(x)	\
    	_invoke_watson(__STR2WSTR(#x), __FUNCTIONW__, __FILEW__, __LINE__, 0)
    
     #else /* defined(_DEBUG) */
      #define _RAISE(x)	\
    	_invoke_watson(0, 0, 0, 0, 0)
     #endif /* defined(_DEBUG) */
    // ...
    

    Also genau das was Finnegan geschrieben hat.



  • Hm Ok, bei genauer Betrachtung macht es doch irgendwo Sinn...

    Hab zwar manchmal das Gefühl das machen die absichtlich, aber gut zu sehen wenn man sich da täuscht 😉


  • Mod

    happystudent schrieb:

    Hab zwar manchmal das Gefühl das machen die absichtlich, aber gut zu sehen wenn man sich da täuscht 😉

    Natürlich ist das Absicht, aber eine andere Absicht, als du denkst.


  • Mod

    .. nicht zu vergessen dass einige Makros existieren damit man greppen kann.


Anmelden zum Antworten