2011-01-28 22 views
8

acabo de ver dos preguntas de la entrevista para la que he podido encontrar ningún satisfacen answers.The preguntas sonC preguntas de la entrevista

  1. Cuántos niveles de profundidad pueden incluir archivos pueden anidar?
  2. ¿Cuándo no se debe usar un tipo de yeso?

¿Alguien me puede explicar las respuestas?

Gracias de antemano.

+2

Sin ofender, pero estas no son preguntas de entrevista muy buenas. No muestran nada sobre su capacidad para pensar de forma inmediata o para resolver problemas novedosos. Sería escéptico sobre cualquier compañía que le haga estas preguntas en una entrevista; no parece que estén buscando lo correcto en un ingeniero. – templatetypedef

+0

En mi humilde opinión, en mi opinión, con preguntas de pensamiento sería útil para encontrar personas que realmente conozcan el idioma profundamente y un buen punto de partida para las discusiones sobre una serie de cuestiones. – Flexo

+0

@Ashot: la longitud de la ruta no tiene un vínculo directo con la anotación #include máxima permitida. Mientras se define la implementación, casi siempre cada archivo se abre individualmente (a menos que sean principalmente rutas relativas, lo que parece poco probable), los nombres no se concatenan y la longitud de la ruta no aumenta. – Flexo

Respuesta

1
  1. Como la otra respuesta ha señalado es definida por la implementación, pero está claro que hay problemas (sobre todo con los tiempos de construcción) que puedan surgir de las grandes cadenas. Puede ser un "code smell" que también indica una encapsulación deficiente.

  2. La respuesta obvia es "cuando no se necesita", es decir, automática, p. Ej. flotar a doble, int a largo (cuando corresponda [*]). Supongo también que es casi seguro que se está preguntando sobre el lanzamiento desde el vacío * a otra cosa, e.g. with malloc (comp.lang.c FAQ item).

[*] Véase el comentario

+0

int long puede ciertamente necesitar tipos de letra en muchos casos, para evitar cambios accidentales en firmar firmados por las reglas de promoción de enteros. – Lundin

11
  1. Cualquier límite es definido por la implementación, pero la norma requiere al menos 15, ver 5.2.4.1

  2. Las mismas condiciones que cualquier otra cosa: cuando está mal, y cuando es innecesario. El ejemplo más famoso es, probablemente, que no debe emitir el valor de retorno desde malloc. No tiene sentido [*] y podría ocultar un error ocasional (olvidando #include stdlib.h). Otro ejemplo es que si distribuye aleatoriamente moldes entre tipos enteros, con el tiempo suprimirá una advertencia del compilador para un modelo de reducción o una comparación entre valores firmados y no firmados, a los que debería haber prestado atención. Los moldes para suprimir tales advertencias no deberían colocarse hasta que esté seguro de que el código es correcto.

[*] Yo solía pensar que había un punto, porque me gustaría escribir cosas como:

foo *p = something; 
... some time later ... 
p = (foo*) malloc(n * sizeof(foo)); 

El elenco proporciona cierta protección contra un error - utilizando el tipo incorrecto en el sizeof . Visualmente puedo ver que el molde coincide con el sizeof, y el compilador verifica que la variable coincida con el modelo, por lo que tengo seguridad.

ahora escribo:

p = malloc(n * sizeof(*p)); 

no necesito un cheque de la seguridad, porque he sin duda la memoria asignada del tamaño correcto para el tipo de p. Bueno, suponiendo que la multiplicación no se desborde.

+0

Si olvida incluir , el compilador que cumple con los estándares no reconocerá malloc. Solo debe usar compiladores de C estándar. – Lundin

+0

En cuanto al molde de malloc, ¿cómo puede ser una protección cuando ni el compilador ni una herramienta de comprobación estática detectarían el error? Para mí sería bastante arriesgado tener tu forma de pensar, ya que podrías escribir sizeof (foo *) por accidente para que coincida con el tipo en el encasillado. Este * no * es el motivo por el que hay typecasts antes de malloc, y tampoco son del todo inútiles. La razón * real * es la compatibilidad entre C y C++, donde el lenguaje anterior permite que los moldes implícitos sean nulos * mientras que el último no. – Lundin

+0

@Lundin: un compilador C99 no reconocerá 'malloc', lo hará un compilador C89. Hace algún tiempo estaba haciendo esto y, como digo, no estoy diciendo que sea una buena práctica. Proporciona seguridad en el sentido de que 'bar * p; ...; p = (foo *) malloc (n * sizeof (foo)); 'no se puede compilar. La compatibilidad entre C y C++ es una razón muy pobre, incluso si es real, ya que está pidiendo problemas para compilar el código C como C++. Si desea usarlo en un programa C++, compilarlo como C y vincularlo desde C++, no intente escribir en un lenguaje imaginario que consista en la intersección de C y C++. –

1
  1. ¡Qué mala pregunta para la entrevista! Que no sepas esto dice algo bueno de ti. Las personas que saben cosas así sin buscarlas en el estándar se describen mejor como nerds misteriosos :)

2.

  • No se debe usar preferentemente para eliminar los calificadores const o volátiles.
  • que le corresponde en la mayoría de los casos no se pueden utilizar para emitir entre punteros que apuntan a diferentes tipos.
  • No se debe utilizar para convertir punteros de función de diferentes tipos.
+0

"Que mala pregunta de entrevista" - más o menos, depende de lo que cuente como una "respuesta correcta". Si me preguntaran esto en una entrevista, no sabría la respuesta, pero sabría dónde buscarla. Sin querer exagerar mis logros aquí, las personas que saben dónde buscar cosas son valiosas. Las buenas entrevistas no le dan un punto por cada trivia que conozca, y contratan a la persona con la mayor cantidad de puntos, pero creo que una pregunta trivial todavía puede comenzar una discusión útil. Por ejemplo, la respuesta de awoodland te dice algo sobre su conocimiento de proyectos más grandes. –

+0

@Steve - Es bastante abierto, lo que permitiría mucha discusión y un "Sé que es un problema, sé cómo buscarlo". La respuesta de un buen candidato podría ser extraída por un buen entrevistador. – Flexo

+0

@Steve Tengo entrevistas de programación C de vez en cuando. Y en base a la experiencia, creo que la pregunta es mala, porque si saben que esto es un problema o no, obtendrían la misma respuesta "No sé, lo buscaría". Y no se puede decir qué tan bueno sería el candidato al buscarlo realmente. Una mejor pregunta sería: ¿hay algún riesgo con los archivos incluidos anidados? Aún así, esa pregunta es de interés leve y hay muchas mejores preguntas sobre el tiempo limitado que tiene en una entrevista. – Lundin

0

No hay límite en cuanto a la profundidad en que se puede anidar, pero el compilador puede quedarse sin espacio en la pila ... ¡así que esto depende del compilador!

Cuestiones relacionadas