¿Por qué compila el siguiente código?¿Por qué compila este fragmento de código?
#include <stdio.h>
int main(void) {
getchar;
}
¿Por qué compila el siguiente código?¿Por qué compila este fragmento de código?
#include <stdio.h>
int main(void) {
getchar;
}
Dado que los nombres de función son alias de los punteros de función a esas funciones, que son en sí mismos valores mucho como números enteros .. Esta es semánticamente muy similar a
#include <stdio.h>
int main(void) {
42;
}
Es válido, pero sin sentido.
y muy molesto !!!! escribir, "int x = getX" en lugar de "x = getX()" funcionará muy felizmente y pondrá algún valor de dirección aleatoria en x. –
Odio C.> _ <[15 carbonilla] – missingfaktor
@Rahul: ¡Esa no es una actitud muy * políglota *! – Tarydon
La misma razón 1;
compile, getchar
es sólo una dirección a una función. El resultado se evalúa, luego se descarta. En la especificación del lenguaje, se llama una "declaración de expresión";
C es extraño, este código se compila también, pero segfaults que para el registro, es el segfault más pequeño en C historia.
main;
¿Porque está libre de errores? –
@Xinxua - +1/acuerdo –
Básicamente se reduce a si se permite que 'getchar 'sea una macro. Si es así, el código puede no ser correcto. –