Quote:
Originally Posted by Peter File
wat?
> int main(int argc, char** argv)
> return 0;
pls
|
Quote:
Originally Posted by Jeoni
Ich vermute, dass P.File auf Folgendes hinaus wollte:
a) es wurde im Beispielcode explizit system("pause") empfohlen (hier bin ich mir nicht sicher, ob dass wirklich Ziel der Nachricht / Kritik war),
b) "int main()" als Signatur des Einstiegspunktes reicht völlig aus, weil es standardkonform ist und auf argc und argv nicht zugegriffen wird und
c) "return 0" am Ende von main ist unnötig, weil das durch den Standard schon implizit gegeben ist.
Generell ist das sicher alles korrekt, wobei ich den Vorteil von b und c nicht erkennen kann, außer, dass die Source-Datei etwas weniger Bytes hat. Gut, bei b kann der Compiler noch Optimierungen machen, so dass argc / argv gar nicht vom Betriebssystem geholt werden muss, aber das halte ich eher für eine kleinere Optimierung und könnte sogar in der aktuellen Form geschehen, weil der Compiler "merkt", dass argc / argv nie benutzt werden.
Mit freundlichen Grüßen
Jeoni
|
Zu a)
Zu sagen "system" zu benutzen sei schlecht nur weil man damit "Schaden anrichten"
kann, ist totaler Unfug. Das ganze "Wir machen alles so, dass der Benutzer nicht an seiner eigenen Dummheit stirbt"-Zeugs geht mir sowieso freundlich gesagt auf den Keks.
Genau so wie es mir auf den Sack geht, dass mir MSVC "Fehler" wirft, wenn ich "strcpy" benutze anstatt "strcpy_n"... Wenn ich mir sicher bin wie groß das Array maximal ist, warum zur Hölle soll ich dann gezwungen werden strcpy_n zu benutzen?
Natürlich kann man sagen: "Ja du bist dir vielleicht sicher, aber was ist mit den ganzen Anfängern/Leute, die weniger Ahnung haben?"
Das ist ein Argument, welches ich gar nicht abstreiten möchte, aber das dann als "Allheilmittel" anzupreisen ist einfach der falsche Weg. Viel besser is den Leute klar zu machen worauf sie achten müssen und wenn ihnen das zu viel ist oder sie sich darum nicht kümmern wollen, kann man immernoch "sicheren Code" empfehlen.
Aber zurück zum eigentlichen Problem:
Die "Hauptprobleme", die bei system auftreten können sind:
1. Du weißt nie ob der command in "system" ein valider command ist
2. Die commands funktionieren nicht auf allen OS gleich
3. Du kannst dir nicht sicher sein, ob dein Programm welches du ausführen möchtest wirklich auch das ist, was ausgeführt wird.
Zu 1. und 2. passt meine Erklärung von oben, solange man weiß was man tut, gibt es wenig Probleme.
Auch 3. ist nicht wirklich ein K.O. Kriterium, natürlich kann jemand die "notepad.exe" durch Malware o.ä. auf deinem System austauschen oder den Standard-Pfad für deine Bash/CMD umstellen.
Aber wenn das schon passiert ist, dann ist "system" sicher dein letztes Problem, weil keine Malware der Welt, wenn sie schon einmal Zugriff auf deine Hardware hat, wird "nur" den CMD-Pfad ändern...
Zu b) & c)
Ob da überhaupt Optimierung (von OS-Seite aus) stattfindet ist fraglich, denn zumindest unter Windows wird immer argv[0] mit dem Programmnamen gefüllt, welcher auch so viel ich weiß immer dem Programm übergeben wird.
Wenn man kein "return 0" am Ende schreibt kann es bei ein paar älteren Compiler-Kollegen schnell mal zu "[Warning] No return found" kommen. Abgesehen davon ist es manchmal besser konsitent zu programmieren und dafür ein paar Zeilen mehr Code zu investieren.
Wie @

schon sagte, der Standard erlaubt viel und dennoch bleibt es am Ende Geschmackssache und über Geschmack lässt sich bekanntlich diskutieren...