2012-08-22 4 views
0

J'ai deux questions sans rapport:préprocesseur directive Syntaxe et Etiquette

  1. Est-il possible d'utiliser #define pour définir autre chose qu'un numéro? (Comme un caractère ASCII étendu).

  2. Est-il considéré comme une bonne pratique d'utiliser des directives de préprocesseur dans la fonction main()? La seule raison pour laquelle je penserais à faire cela est d'exécuter un code différent en fonction du système d'exploitation en cours d'exécution.

Répondre

0

Les macros de type objet (#define macros sans arguments) sont simplement des remplacements. Ainsi, tout ce qui pourrait être dans votre code peut être le remplacement, par exemple une chaîne littérale: #define PROGRAM_NAME "MyProgram" ou des blocs de code multiligne. Voici un exemple inutile de ce dernier:

#define INFINITE_PRINTF while (1) \ 
         { \ 
          printf("looping..."); \ 
         } 

Quant à la deuxième question, il est pratique courante d'utiliser les directives préprocesseur tout au long du code C pour faire exactement ce que vous avez mentionné: le code conditionnel, y compris/exclusion, dans main et autre part. Occasionnellement, je vais utiliser #define pour les constantes près de l'endroit où elles seront utilisées, pour plus de clarté.

0

Vous ne pouvez pas seulement # définir les chaînes, les gens #define le code. Bien que le créateur de C++ fronce les sourcils à l'utilisation du préprocesseur.

Je pense que main() est trop haut pour le code spécifique au système d'exploitation. Je voudrais essayer de faire des fonctions/classes qui enveloppent tout code spécifique du système d'exploitation. Plus vous pouvez placer un code spécifique au système d'exploitation, mieux c'est.

+0

À votre deuxième point: je suis d'accord. Cependant, le problème de ne pas inclure les directives directement dans la fonction 'main()' est que vous pourriez avoir à déclarer des variables globales. –

+0

@Redmastif Je ferais tout mon possible pour rendre vos classes de variables globales qui contiennent les #defines. – Scooter

Questions connexes