Cualquier límite es definido por la implementación, pero la norma requiere al menos 15, ver 5.2.4.1
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.
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
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
@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