Was haltet ihr von einem definition Keyword für Funktionsdefinitionen?



  • tl;dr: Ein kontextsensitives Keyword definition , was eine Funktionsimplementierung kennzeichnet und somit undefined errors durch Tippfehler vermeidet.
    Neulich hatte ich einen undefined reference error weil ich mich beim Definieren einer Funktion vertippt hatte. Der Buchstabendrehe viel mir dann natürlich auch nicht bei der Fehlersuche auf, weswegen einige Zeit verloren ging. 🙄
    Da kam mir die Idee ein definition (context sensitive) Keyword einzuführen. Ähnlich wie override wird es am Ende einer Funktionsdefinition eingefügt. Anstatt einen Fehler zu geben, wenn es keine virtuelle Methode überschreibt, gibt es einen Fehler, wenn die Funktion noch nicht vorher deklariert wurde (wie das bei Funktionsdefinitionen in Sourcefiles nicht sein sollte). So erspart man sich solche dämlichen Fehler.
    Dagegen spricht natürlich, dass es solche Fehler anderes als bei override nicht zu blöden Runtimebugs führt, sondern lediglich zu Linker-Errors, weswegen es evtl. den Aufwand nicht wert ist.
    Was haltet ihr davon?



  • Finde ich eher unnötig, weil es den Code aufbläht und kaum Fehler vermeidet.

    Mit einer vernünftigen IDE kannst du zur Definition springen (oder gleich die Definition generieren lassen, sodass erst gar keine Tippfehler entstehen) und findest so den Fehler schnell -- gerade wenn die Definition nicht gefunden wird.



  • ...



  • Jupp, sowas hab ich mir fast schon gedacht...



  • Ich seh' den grossen Nutzen auch nicht. Hätte aber auch kein Problem damit, wenn es eingeführt würde.
    Optional müsste es ja sowieso sein, da es andernfalls ein Breaking-Change von galaktischem Ausmass wäre.


  • Mod

    Der Intelcompiler hat eine Warnstufe dafür.



  • Wofür gibt es in C++11 generalized attributes?

    int f() [[std::implementation]] {} // error, falls nicht definiert
    

    ~(richtig: generalized attributes werden wohl nie Anwendung finden weil viel zu verbose. Der Standard halt.)~



  • s/definiert/deklariert



  • derstandardhalt schrieb:

    ~(richtig: generalized attributes werden wohl nie Anwendung finden weil viel zu verbose. Der Standard halt.)~

    Ach watt 🙂
    Die sind auch nicht wirklich mehr "verbose" als z.B. C# attributes.
    Und bei vielen Dingen isses egal.
    So Sachen wie "pointers do not alias" (restrict) oder "function will never return (except by throwing)" braucht man ausreichend selten. Und der Nutzen wäre ausreichend gross um sich in diesen seltenen Fällen zu überwinden die Attribute doch zu schreiben.


Log in to reply