Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 15:02

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Wozu Destruktor

Discussion on Wozu Destruktor within the C/C++ forum part of the Coders Den category.

Reply
 
Old 07/21/2016, 20:44   #16
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
theoretisch darf man auch sämtlichen code in eine zeile schreiben - muss man das dann als "korrektur" drunterschreiben und dann patzig reagieren wenn man gefragt wird was man damit sagen möchte?
Dr. Coxxy is offline  
Thanks
3 Users
Old 07/22/2016, 15:26   #17
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by Peter File View Post
wat?

> int main(int argc, char** argv)



> return 0;



pls
Quote:
Originally Posted by Jeoni View Post
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...
Shadow992 is offline  
Old 07/22/2016, 15:30   #18
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
Quote:
Originally Posted by Shadow992 View Post
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.
dies trifft auch auf ubuntu zu, demnach nehme ich an, dass dies auf sogut wie allen linux plattformen genau so ist.
.Scy is offline  
Old 07/23/2016, 17:35   #19


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,905
Received Thanks: 25,407
Quote:
Originally Posted by Jeoni View Post
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
Dann tendiere ich zu "ziemlich dämlich". Ich habe einfach nur den Code des OPs übernommen und die Stelle korrigiert, die ich kritisiert habe. Die Kommentare stammen demnach nicht von mir. Und nirgendwo habe ich dort Anspruch auf ein Musterbeispiel für bestpractice C++ erhoben.

Quote:
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.
Das ist tbh ziemlicher Unsinn. Genau so entsteht unsicherer Code. Anfänger wissen nicht, wann etwas besser oder sicherer ist und das kannst du ihnen auch nicht mal eben vermitteln, das ist zu einem großen Teil Erfahrung. Genau deswegen ist eins der besten Lehrprinzipien: "Du sollst das niemals anwenden, das verursacht nur Probleme". Wenn die Person weit genug ist, um selbst einschätzen zu können, welche möglichen Konsequenzen die Anwendung von Funktion X hat und wie sie damit umzugehen hat, dann weiß sie auch selbst, dass dieser allgemeingültige Leitsatz doch nicht so allgemeingültig ist und bei Vorhandensein von triftigen Gründen übergangen werden kann.

Secure by default. Nur so funktioniert Sicherheit. Menschen gehen immer den einfachsten Weg, also gar nicht erst einfache, aber problematische Wege aufzeigen, bevor sie vernünftig selbst darüber urteilen können.

Quote:
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...
Es geht dabei weniger um Malware als darum, dass du unerwartete Ergebnisse erhalten könntest. Das ist gerade unter Unix ein Problem, wo für X verschiedene Distributionen diverse verschiedenste "Standard"pfade für bestimmte Binaries koexistieren. Und das zu debuggen ist dann auch nicht lustig.
MrSm!th is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Wozu Surakopf?
08/19/2012 - Metin2 Private Server - 4 Replies
Hallo liebe Com. :) Ich habe da mal ne Frage: Wozu deint eigentlich die Surakopf.exe? (Das man sie braucht um den CLient als USER zu Starten weiß ich) Aber warum können normale User eines Hamachi Servers nicht auch mit der Metin2Client.exe rein? Denn meine Surakopf Scheißt immer ab nach dem Patchen deshalb kann man das irgendwie so einstellen das auch Hamachi User mit der Metin2Client.exe auf den Server können? MfG XxKeynanxX
Wozu ist der Bypass?
09/25/2011 - S4 League - 12 Replies
ja, ich wollte fragen was der Bypass nützt, und was er kann. MfG
Wozu eg?
01/25/2011 - Main - 1 Replies
Weiß einer wozu eg ist wen ja in den topic schreiben >:P
Wozu?
11/26/2010 - S4 League - 3 Replies
Habe mal ne dumme Frage...wozu sind Suspender gut für S4 ich spiele das slebst nicht lange...Deswegen halt meine Frage!
/ski - wozu ?
05/15/2009 - Metin2 Private Server - 4 Replies
Ich lese in letzer zeit immer was von "/ski cheats" auf pservern -.- 1)Was ist das ?oO 2Was bewirkt das ? 3)Welche /ski cheats gibts ?^^ Wäre nett wenn ihr antwortet =)



All times are GMT +1. The time now is 15:03.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.