plug - pcwhd
diferencia entre "ifndef" y "if! define" en C? (2)
He visto #ifndef ABC
y #if !defined (ABC)
en el mismo archivo fuente en C.
¿Hay diferencia sutil entre ellos? (Si es una cuestión de estilo, ¿por qué alguien los usaría en el mismo archivo?)
En el contexto que dio, son lo mismo: solo está comprobando la existencia de un identificador de macro.
Sin embargo, el formulario #if le permite evaluar expresiones, que pueden ser útiles.
No, no hay diferencia entre los dos cuando se usan de esa manera. La última forma (con el uso de defined()
) es útil cuando el #if
inicial o una de las siguientes condiciones de #elif
necesita una prueba más compleja. #ifdef
seguirá funcionando, pero podría ser más claro usando #if defined()
en ese caso. Por ejemplo, si necesita probar si se define más de una macro, o si es igual a un valor específico.
La varianza (usar ambos en un archivo) podría depender de las sutilezas específicas en el uso, como se mencionó anteriormente, o simplemente una mala práctica, por ser inconsistente.