2009-11-17 42 views
14

¿Es posible decirle al C preprocesador para comprobar si se declara una función (no una macro)? He intentado lo siguiente, pero no parece funcionar:Verifique si la función se declara con el preprocesador C?

#include <stdio.h> 

int main(void) 
{ 
#if defined(printf) 
    printf("You support printf!\n"); 
#else 
    puts("Either you don't support printf, or this test doesn't work."); 
#endif 
    return 0; 
} 
+0

Estoy muy interesado en el motivo de esto. Las librerías con las que está trabajando deben ser coherentes, para retomar su ejemplo: no habrá una stdio.h sin printf y si printf puede ser eliminado en un futuro lejano, no sabrá ahora cómo va la sustitución ser llamado. – flokra

+0

Estoy pensando que no es para printf específicamente, simplemente cualquier nombre de función. Pero, si quieres saber si las funciones están ahí, solo llámalo - el error del compilador te dirá :-) – paxdiablo

+5

Mi principal incentivo fue verificar funciones como bcopy() o arc4random() (al escribir programas multiplataforma) , que no siempre están definidos. – Michael

Respuesta

21

Nº preprocesador se ejecuta antes de que el compilador de C y las declaraciones de funciones del compilador C procesos. El preprocesador está solo allí para el procesamiento de texto.

Sin embargo, la mayoría de los archivos de encabezado incluyen macros de protección como _STDIO_H_ que puede probar en la etapa de preprocesador. Sin embargo, esa solución no es portátil ya que los nombres de las macro de inclusión no están estandarizados.

0

Como el preprocesador no tiene conocimiento del lenguaje C/C++ (realmente solo reemplaza el texto), supongo que esto no es posible. ¿Por qué quieres hacer esto? Tal vez hay otra manera.

1

El preprocesador es un programa simple y no sabe casi nada sobre el lenguaje subyacente. No puede decir si una función ha sido declarada. Incluso si pudiera, la función se puede definir en otra biblioteca y el símbolo se resuelve durante la vinculación, por lo que el preprocesador no pudo ayudar en ese sentido.

5

Si observa herramientas como autoconf, verá que pasan por muchas pruebas para determinar qué tiene o no tiene una computadora, para compilarlas correctamente, y luego configuran las #DEFINES correctas.

Es posible que desee ver ese modelo, y esa herramienta si tiene algún sabor de Unix, ya que lo que quiere hacer no va a ser posible, ya que otros indudablemente están señalando.

Cuestiones relacionadas