Datei verfolgen, die ab und an gelöscht wird
-
supertux schrieb:
Javaner schrieb:
Die volle Funktionalität von try/catch läßt sich definitiv
NICHT mit Makros nachbilden.das stimmt, aber das hier ist sehr nah dran
Hey, doch noch gefunden! Hehe, da hast du aber lange gesucht!
-
Aaalso:
da ich an diesen TRY und CATCH dingern interessiert bin habe ich folgendes getestet:#include <stdio.h> #include <excpt.h> #include <windows.h> #define TRY struct exception* c__ex = NULL; #define CATCH c__ex_handler: if (c__ex) #define THROW(e) { c__ex = e; goto c__ex_handler; } #define FINALLY int main() { int a[1]; printf( "Fangen einer AccessViolation." ); TRY{ printf( "inTry:\n" ); a[2] = 1; } CATCH{ printf( "error" ); } }
Und siehe da, windows kommt daher und fragt mich "Programm Debugen, Beenden oder auf Programm warten?";
Ich würds geil finden wenns geht, aber bin wohl zu doof xD
Sind "defines" Makros?
-
lippoliv schrieb:
Sind "defines" Makros?
So etwas hier ist ein Makro:
#define ADDIERE(x,y) x+y int main() { int i=ADDIERE(1,2); }
Das hier würde ich eher als Präprozessor-Konstante bezeichnen:
#define PI (3.1415926535897932384626433832795028841971693993751)
#defines sind nur Textersetzungen, die vor dem Kompilieren stattfinden (und deshalb auch sehr unsicher).
-
Ok danke... Jetzt versteh ich das ein wenig...
-
_matze schrieb:
Hey, doch noch gefunden! Hehe, da hast du aber lange gesucht!
nein, habe ich nicht. Ich musst im anderen Forum fragen, ob jemand noch weiß, wo es war, denn nach 30 Minuten konnte ich nichts finden
Schande über mich.
_matze schrieb:
#defines sind nur Textersetzungen, die vor dem Kompilieren stattfinden (und deshalb auch sehr unsicher).
naja, Makros wie ADDIERE sind auch Textersetzungen. Und inwiefern sagst du, dass Makros sicher und unsicher sind?
-
lippoliv schrieb:
Aaalso:
da ich an diesen TRY und CATCH dingern interessiert bin habe ich folgendes getestet:#include <stdio.h> #include <excpt.h> #include <windows.h> #define TRY struct exception* c__ex = NULL; #define CATCH c__ex_handler: if (c__ex) #define THROW(e) { c__ex = e; goto c__ex_handler; } #define FINALLY int main() { int a[1]; printf( "Fangen einer AccessViolation." ); TRY{ printf( "inTry:\n" ); a[2] = 1; } CATCH{ printf( "error" ); } }
Und siehe da, windows kommt daher und fragt mich "Programm Debugen, Beenden oder auf Programm warten?";
Ich würds geil finden wenns geht, aber bin wohl zu doof xDzugriffe abfangen über array-grenzen hinaus und ähnlich schlimme dinge kannst, du damit nicht. sowas muss das OS (die programmiersprache ist dann fast egal) oder die virtual machine (Java, .NET, z.b.) unterstützen. exceptions ohne systemunterstützung sind ziemlich sinnlos weil sie immer selbst selbst 'geworfen' werden müssen (siehe das THROW makro).
-
Dann bringt mir also das try, sonstwas ding nicht viel, denn ich möchte "AccessViolation" gerne selber behandeln können xD
Die restlichen Dinge klären sich früher oder später von selbst.Danke trotzdem, und danke für die genauere erläuterung, macht sinn.
-
supertux schrieb:
_matze schrieb:
Hey, doch noch gefunden! Hehe, da hast du aber lange gesucht!
nein, habe ich nicht. Ich musst im anderen Forum fragen, ob jemand noch weiß, wo es war, denn nach 30 Minuten konnte ich nichts finden
Schande über mich.
Genau, Schande über dich!
Schön, dass du da soviel Zeit investiert hast.
supertux schrieb:
_matze schrieb:
#defines sind nur Textersetzungen, die vor dem Kompilieren stattfinden (und deshalb auch sehr unsicher).
naja, Makros wie ADDIERE sind auch Textersetzungen. Und inwiefern sagst du, dass Makros sicher und unsicher sind?
Damit meinte ich alle defines (ob jetzt Makro oder Konstante).
-
_matze schrieb:
Damit meinte ich alle defines (ob jetzt Makro oder Konstante).
jedes sprachmittel ist so gut oder schlecht, wie der programmierer, der's verwendet. wer die tücken von makros kennt, braucht sich vor ihnen nicht zu fürchten.
-
fricky schrieb:
_matze schrieb:
Damit meinte ich alle defines (ob jetzt Makro oder Konstante).
jedes sprachmittel ist so gut oder schlecht, wie der programmierer, der's verwendet. wer die tücken von makros kennt, braucht sich vor ihnen nicht zu fürchten.
Da gebe ich dir hundertprozentig Recht! Unsere Software ist ehrlich gesagt voll von defines aller Art. Ist ja manchmal auch einfach von Vorteil.
Zum Beispiel sowas hier:
#define ROUNDINT(v) ((int)((v)+((v)>0?0.5:-0.5)))
Praktisch und sau-schnell. Man muss halt nur darauf achten, nicht gerade einen CString o.ä. zu übergeben (am besten noch an einer Stelle, die ganz selten aufgerufen wird).
EDIT: Blödes Beispiel, CString übergeben geht natürlich nicht...
Bei defines herrscht halt nur eine potentielle Unsicherheit, der man aber mit überlegtem Handeln entgegenwirken kann.