2017-04-04 6 views
0

Je veux un moyen d'avoir des "définitions de préprocesseur global" de telle sorte que je puisse changer une seule valeur avant la compilation pour ajouter ou supprimer des fonctionnalités de mon programme. Actuellement, je suis un "script global" (appelé God.cs) avec consts tels que:Comment faire des définitions de préprocesseur global dans un seul endroit sans avoir beaucoup d'avertissements?

public const bool PRINT_RUN_VALUES = true; 
public const bool DEBUG_MOVEMENT = false; 
public const bool DOUBLE_SPEED = false; 

Avec tous les scripts pertinents à l'aide de ces valeurs, par exemple:

dans le script 1:

if (God.PRINT_RUN_VALUES) { 
    float averageDist = /* calculate values */ 
    print("Script1: averageDist = " + averageDist); 
} 

dans le script 2:

if (God.PRINT_RUN_VALUES) { 
    print("Script2: radius = " + radius); 
    print("Script2: time = " + time); 
} 

Le problème avec cette méthode est que je reçois des tonnes de

CS0162: Code Inaccessible détecté

avertissements. Je peux désactiver ces avertissements en utilisant:

#pragma warning disable 0162 
#pragma warning disable 0429 

Mais je ne veux pas faire cela parce que ces avertissements peuvent être utiles dans les cas qui ne concernent pas ces valeurs de God.cs. Une autre solution pourrait être d'utiliser des définitions de préprocesseur classiques tels que:

#define PRINT_RUN_VALUES 
... 
#if (PRINT_RUN_VALUES) 
    float averageDist = /* calculate values */ 
    print("Script1: averageDist = " + averageDist); 
#endif 

Cependant, autant que je sais que cela me faudrait au début de chaque fichier .cs ajouter « #define PRINT_RUN_VALUES », qui deviendrait un cauchemar quand je veux éteindre rapidement ou sur ces déclarations globales. Je veux que toutes ces définitions globales soient un seul endroit pour que je puisse rapidement les éteindre et les rallumer.

Comment est-ce que je peux définir quelque chose de préprocesseur tel qu'il n'est pas inclus dans chaque script? Je sais qu'il existe des définitions de proprocessor qui répondent à ce critère, telles que des définitions pour vérifier quel système d'exploitation compile le logiciel. Ou y a-t-il un autre moyen de contourner cela?

+0

Vous pouvez les définir dans les propriétés du projet, c'est ainsi que DEBUG est défini. – DavidG

+0

Donc, vous ne comprenez pas vraiment l'avertissement et comment cette très mauvaise pratique va avoir des ennuis. Qu'est-ce que vous voulez vraiment savoir? Voulez-vous connaître la vérité qui dérange ou préférez-vous ne pas être rappelé de ce que vous ne connaissez pas? –

Répondre

1

Vous pouvez les définir dans les propriétés du projet, par exemple, comment le symbole DEBUG est défini. Faites un clic droit sur votre projet, sélectionnez Propriétés et entrez vos csymbols personnalisés dans la case symboles de compilation conditionnelle:

Project properties

Maintenant, dans mon code, je peux le faire:

#if CHEESE 
    public string CheeseName = "Gouda"; 
#endif 

Notez que ces symboles sont définis dans le cadre de la configuration. Cela signifie que vous pouvez définir différents symboles pour la publication par rapport à un environnement de débogage ou UAT par exemple.

+0

Merci bon monsieur – danglingPointer