J'ai vu #ifndef ABC
Et #if !defined (ABC)
dans le même fichier source C.
Y a-t-il une différence subtile entre eux? (Si c'est une question de style, pourquoi quelqu'un les utiliserait-il dans le même fichier)
Non, il n'y a aucune différence entre les deux lorsqu'ils sont utilisés de cette façon. Cette dernière forme (en utilisant defined()
) est utile lorsque la condition initiale #if
Ou l'une des conditions #Elif
Suivantes nécessite un test plus complexe. #ifdef
Fonctionnera toujours, mais il pourrait être plus clair en utilisant #if defined()
dans ce cas. Par exemple, si elle doit tester si plusieurs macros sont définies ou si elle est égale à une valeur spécifique.
La variance (en utilisant les deux dans un fichier) pourrait dépendre de subtilités spécifiques d'utilisation, comme mentionné ci-dessus, ou simplement de mauvaises pratiques, en étant incohérente.
Dans le contexte que vous avez donné, ce sont les mêmes: vous ne faites que vérifier l'existence d'un identifiant de macro.
Cependant, le formulaire #if vous permet d'évaluer des expressions, ce qui peut être utile.