Différence entre la directive de préprocesseur #if et normale si

Quelle est la différence entre la directive de préprocesseur #if et normale if en C ? Je suis nouveau à C.

Les instructions précédées de # sont appelées directives de préprocesseur. Ils sont traités par un parsingur avant la compilation du code. Depuis la première recherche, utilisez Google (http://www.cplusplus.com/doc/tutorial/preprocessor/):

Les directives de préprocesseur sont des lignes incluses dans le code de nos programmes qui ne sont pas des instructions de programme mais des directives pour le préprocesseur. Ces lignes sont toujours précédées d’un signe dièse (#). Le préprocesseur est exécuté avant le début de la compilation du code. Par conséquent, il digère toutes ces directives avant que le code ne soit généré par les instructions.

Donc, un #if sera décidé à la compilation, un “normal” si sera décidé à l’exécution. En d’autres termes,

 #define TEST 1 #if TEST printf("%d", TEST); #endif 

Comstackr en tant que

 printf("%d", 1); 

Si à la place vous avez écrit

 #define TEST 1 if(TEST) printf("%d", TEST); 

Le programme comstackrait réellement comme

 if(1) printf("%d", 1); 

Preprocessor if vous permet de conditionner le code avant qu’il ne soit envoyé au compilateur. normalement utilisé pour empêcher le code d’en-tête d’être ajouté deux fois.

edit, vouliez-vous dire C ++, car il était étiqueté comme tel? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

Le préprocesseur if est géré par le préprocesseur en tant que première étape du programme en cours de compilation. La normale if est gérée au moment de l’exécution du programme. La directive preprocessor est utilisée pour activer la compilation conditionnelle, en utilisant différentes sections du code en fonction de différentes constantes / expressions de préprocesseur définies. La normale if est utilisée pour contrôler le stream dans le programme en cours d’exécution.

La directive du préprocesseur recherche les macros ou, en d’autres termes, les directives #define et remplace la définition si elle est définie. Par conséquent, seules les variables macro sont vérifiées. Ceci est effectué pendant la phase de prétraitement.

Le jeton normal if ou le stream de contrôle si recherche une condition avec des variables ou des valeurs de retour de fonction. Cette vérification est effectuée lors de l’exécution.