supuesta entrevista pregunta y respuesta here.¿Es esta explicación precisa para el código C que no se compilará?
¿Se compilará el siguiente código (en C)?
#define X 8;
int main(void)
{
++X; // will this line compile?
}`
No soy experto en C, pero sé que algunos C++ y pensamiento: por supuesto que no, no se puede incrementar el número 8, que es un valor de lado derecho. Por supuesto, el preprocesador reemplaza el X
con el 8
antes de intentar compilar, y cuando intenta compilar, falla por ese mismo motivo. Por otra parte, yo soy el que la lectura de sitios web pregunta de la entrevista por lo que entonces pensé que sabe ...
Aquí está la explicación dada:
"Estrictamente hablando, el operando del prefijo (o postfix) operador de incremento debe ser un lvalue no modificable. Ahora que sabemos qué es un valor l, debemos preguntarnos si X es un valor l. X es una macro, lo que significa que no identifica un lugar en la memoria: las macros usan el reemplazo de texto simple a través del preprocesador. Debido a que las macros no existen en una región de la memoria, no son valores. Esto significa que X no se puede usar como un operando del operador de incremento de prefijo. Por lo tanto, el código que se muestra arriba no se compilará ".
¿Esta explicación es tan simple como creo que es?
¿Cuántos errores puedes encontrar arriba? Creo que tal vez esa debe ser la pregunta de la entrevista ...
y esto es apenas divertido:.
"Intuitivamente, es posible que pueda decir que el código anterior no compilará - sin saber exactamente por qué Sin embargo, en una situación de entrevista, se espera que brinde algún razonamiento como el que se da arriba. Las respuestas simples de sí o no simplemente no lo cortarán en una entrevista ".
No, no compilará, ya que debería ser '#define X 8', sin'; ' –
Suena muy ... académico ... :) – Torp
Bien , también es un error (en C89, y según cualquier conjunto de advertencias cuerdo y pautas del programador) no 'devolver 0;' o algún otro número al final de 'main' ... –