Ich habe gerade zwei Interviewfragen gesehen, für die ich keine befriedigenden Antworten finden konnte. Die Fragen sind
Kann mir jemand die Antworten erklären?
Vielen Dank im Voraus.
Jedes Limit ist implementierungsdefiniert, aber der Standard erfordert mindestens 15, siehe 5.2.4.1
Gleiche Bedingungen wie alles andere: wenn es falsch ist und wenn es unnötig ist. Das bekannteste Beispiel ist wahrscheinlich, dass Sie den Rückgabewert nicht von malloc
umsetzen sollten. Es ist sinnlos [*] und es könnte einen gelegentlichen Fehler verstecken (vergiss #include stdlib.h
). Ein anderes Beispiel ist, dass Sie, wenn Sie nach dem Zufallsprinzip eine Reihe von Ints zwischen Integertypen streuen, eine Compiler-Warnung für eine schmalere Besetzung oder einen Vergleich zwischen vorzeichenbehafteten und unsignierten Werten unterdrücken, auf die Sie achten sollten. Casts zur Unterdrückung solcher Warnungen sollten erst platziert werden, wenn Sie sicher sind, dass der Code richtig ist.
[*] Ich dachte immer, dass es einen Punkt gibt, weil ich Dinge schreiben würde wie:
%Vor% Die Besetzung bietet einen gewissen Schutz gegen einen Fehler - den falschen Typ in sizeof
verwenden. Visuell kann ich sehen, dass der Cast mit dem sizeof
übereinstimmt, und der Compiler prüft, ob die Variable dem Cast entspricht, also habe ich Sicherheit.
Jetzt schreibe ich:
%Vor%Ich brauche keinen Sicherheitsnachweis, weil ich sicher Speicher von der richtigen Größe für die Art von p zugewiesen habe. Nun, vorausgesetzt, die Multiplikation läuft nicht über.
2.
Wie die andere Antwort darauf hingewiesen hat, ist die Implementierung definiert, aber es gibt eindeutig Probleme (insbesondere bei den Bauzeiten), die wahrscheinlich von großen Ketten ausgehen. Es könnte ein " Code-Geruch " sein, der auf eine schlechte Kapselung hindeutet.
/ li>Die offensichtliche Antwort ist "wenn es nicht gebraucht wird", d.h. automatisch, z.B. float to double, int zu long (wenn angemessen [*]). Ich würde auch annehmen, dass es fast sicher darum geht, von void * auf etwas anderes zu übertragen, zB mit malloc ( comp.lang.c FAQ ).
[*] Siehe Kommentar
Tags und Links c