web-dev-qa-db-fra.com

différence entre "ifndef" et "if! defined" en C?

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)

43
onemach

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.

39
Dan Fego

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.

6
Jerry Penner