C Interviewfragen [geschlossen]

8

Ich habe gerade zwei Interviewfragen gesehen, für die ich keine befriedigenden Antworten finden konnte. Die Fragen sind

  1. Wie viele Ebenen tief können Dateien verschachtelt sein?
  2. Wann sollte ein Typcast nicht verwendet werden?

Kann mir jemand die Antworten erklären?

Vielen Dank im Voraus.

    
Maddy 28.01.2011, 10:41
quelle

4 Antworten

11
  1. Jedes Limit ist implementierungsdefiniert, aber der Standard erfordert mindestens 15, siehe 5.2.4.1

  2. 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.

    
Steve Jessop 28.01.2011 10:48
quelle
1
  1. Was für eine schlechte Interviewfrage! Dass du das nicht weißt sagt etwas Gutes über dich. Leute, die solche Dinge kennen, ohne sie im Standard nachzuschlagen, werden am besten als unheimliche Nerds beschrieben:)

2.

  • Es sollte vorzugsweise nicht verwendet werden, um konstante oder volatile Qualifier zu entfernen.
  • Es sollte in den meisten Fällen nicht verwendet werden, um zwischen Zeigern zu zeigen, die auf verschiedene Typen zeigen.
  • Es sollte nicht verwendet werden, um zwischen Funktionszeigern verschiedener Typen zu sprechen.
Lundin 28.01.2011 10:56
quelle
1
  1. 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>
  2. 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

    
Flexo 28.01.2011 10:46
quelle
0

Es gibt keine Grenzen dafür, wie tief es verschachtelt werden kann, aber Ihr Compiler kann keinen Stack-Speicher mehr haben ... also ist das compilerabhängig!

    
garima 19.03.2011 15:32
quelle

Tags und Links