D'après ce que j'ai vu, la principale utilisation de #if defined
est de faire un chèque de plusieurs définitions de macro sur une ligne. Sinon, pour les conditions de définition de macro unique, elles sont identiques pour autant que je sache.
#include <stdio.h>
int main()
{
#if defined(FOO) && defined(BAR)
printf("foobar!\n");
#else
printf("nothing.\n");
#endif
return 0;
}
$ tcc -DFOO -run a.c
nothing.
$ tcc -DBAR -run a.c
nothing.
$ tcc -DFOO -DBAR -run a.c
foobar!
En outre, le programme ci-dessus compile bien avec gcc -Wall -ansi a.c
de sorte que suggère #if defined
est correcte ANSI C. De plus, this ANSI C summary from 1987 listes #if defined
que le comportement nouvellement défini pour le préprocesseur selon les normes ANSI - ce devrait être standard à travers tout compilateur compatible ANSI que vous utiliserez.
Si vous n'utilisez pas #if defined
, vous auriez à faire
#ifdef FOO
#ifdef BAR
printf("foobar!\n");
#endif /* BAR */
#endif /* FOO */
Aussi, the Redhat manual for the C preprocessor dit
#if defined MACRO
est précisément équivalente à #ifdef MACRO
.
Ils sont orthographiés différemment. –