Question

Je suis à la recherche par une C code source et je ne comprends pas la partie suivante

#if 1

   typedef unsigned short PronId;
   typedef unsigned short LMId;
#  define LM_NGRAM_INT

#else

   typedef unsigned int LMId;
   typedef unsigned int PronId;
#  undef LM_NGRAM_INT

#endif

Pourquoi quelqu'un ferait #if 1? Est-il vrai que seul le premier bloc sera jamais traité?

Était-ce utile?

La solution

Oui .. Seul le premier bloc sera traité --- jusqu'à ce que quelqu'un change sera compilé le 1 à 0. Ensuite, l'autre bloc. Ceci est un moyen pratique de blocs de commutation de code temporaire dans et hors tout en testant différents algorithmes.

Autres conseils

Alors que l'on peut rapidement choisir quelle partie de la compilation en changeant la #if 1 à #if 0.

L'une des propriétés fondamentales du logiciel est que programme informatique ne coûte pas cher à modifier .

C'est pourquoi le code est écrit de telle manière qu'il rendra plus facile la modification. Voilà pourquoi ils ont besoin de divers modèles, comme « interface » ou « proxy ».

Et voilà pourquoi vous voyez parfois des constructions étranges comme #if 1-#else-#endif, un seul but est de changer facilement la partie du code qui sera compilé, par petit effort:. Changement 1 à 0

Je mets que dans mon code quand je dois tester différents ensemble de paramètres. Habituellement, mon produit sera livré avec différents paramètres par défaut que ce que je peux travailler dans un environnement de débogage, donc je mis les valeurs par défaut d'expédition dans un #if 1 et les valeurs par défaut de débogage dans le #else avec un #WARNING pour me prévenir qu'il est en cours de construction avec debug par défaut.

Pour expérimenter avec différents chemins de code.

Il est juste une autre façon de commenter gros morceau de code, donc, éditeur indentation automatique ne serait pas casser indentation (bloc commenté de code serait en retrait sous forme de texte, non pas comme code).

J'utilise en fait comme une bidouille pour rendre le code plus facile pliage; si je conclurai une section de code dans un #if 1 ... #endif, je peux le plier dans mon éditeur. (Le code en question est très macro-lourd, pas écrit par moi, des moyens plus traditionnels de façon faire un énorme bloc code gérable ne fonctionnera pas.)

Il est une autre façon de dire #if true il est très probablement le résultat du code qui vérifiait précédemment pour un autre symbole puis refondus être toujours vrai.

La façon plus propre de le faire est en train de faire quelque chose comme probablement:

#if ALGO1

#else

#endif

Mais, vous devrez passer algo1 au compilateur args quelque part ... par exemple dans un makefile, vous devez ajouter -DALGO1 = 1 (si n ° 1 est fourni, 1 est supposé). Ref: http: //www.amath .unc.edu / sysadmin / DOC4.0 / c-compilateur / User_Guide / cc_options.doc.html

Ceci est plus de travail ... donc, le plus souvent, pour des contrôles rapides, #if 1 est utilisé. Et dans certains cas, oubliés et laissés ainsi: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top