(void) wenn kein Rückgabewert
-
Hallo zusammen,
heute hat mir einer gesagt, dass es in vielen Guidelines vorkommt, das bei einem Funktionsaufruf der Rückgabewert nach void gecastet wird, sollte er nicht benutzt werden.
Also s.Bsp.:int main() { (void) printf("hallo Welt"); }
Da mir das noch nie begegnet ist (muss ja nix heißen
), wollte ich mal bei
Euch nachfragen, ob ihr das so kennt und/oder benutzt.PS: Ich persönlich finde das total unübersichtlich, weil das den Quellcode ziemlich mit sinnlosen casts aufbläht
-
Wozu soll das gut sein?
-
Die Motivation dahinter:
1. Man kann damit statische Codeanalysatoren verwirren, die sich dann nicht über fehlende Benutzung des Rückgabewertes beschweren.
2. Man macht so einem menschlichen Leser klar, dass man bewusst den Rückgabewert ignoriert und nicht nur aus Versehen.Dagegen spricht:
1. Clevere Codeanalysatoren lassen sich dadurch nicht verwirren und meckern das, meistens zurecht, an.
2. Dumme Menschen sind verwirrt, was das soll.
3. Meistens hat das ja auch einen Grund, warum die Funktion etwas zurück gibt.Besser finde ich da so Sachen wie GCCs warn-unused-result, mit denen man kenntlich machen kann, ob ein Rückgabewert kritisch oder nur optional ist.
Im Prinzip kann man sagen:
- Du entwickelst privat: Mach es wie du willst
- Du entwickelst für ein Projekt mit mehreren Leuten: Halte dich an die coding convention
- Du stellst die Coding convention auf: Mach es wie du willst.Ich würde es eher nicht machen, da es kostet, aber wenig nützt. Man möchte ungerechtfertigte Warnungen unterdrücken. Es provoziert jedoch, dass gerechtfertigte Warnungen unterdrückt werden, weil die Programmierer ein gewohntes Mittel haben, die Warnung ohne eigenes Nachdenken zu entfernen. Außerdem könnte man stattdessen bessere Codeanalyseprogramme nutzen.