J'ai un fichier d'en-tête à la directive préprocesseur définie comme suit:La valeur de la même directive préprocesseur est correcte dans un fichier et le mal dans un autre
#define X 10
#define Y 5
#define DIV (X/Y)
Maintenant, j'ai deux fichiers C différents que j'ai inclus cet en-tête. Lorsque j'imprime la valeur de ceci dans ces deux fichiers, la valeur est différente! Le programme est assez volumineux et plusieurs macros de préprocesseur sont utilisées.
fichier C# 1 Valeur de DIV est 2
fichier C# 2 Valeur de DIV est 8!
Pourquoi cela se produit-il? C'est la première fois que j'ai jamais rencontré une telle erreur. Est-ce une erreur avec le compilateur ou le fichier make?
Est-ce parce que DIV est défini dans un autre en-tête? ou y a-t-il un problème beaucoup plus profond?
----------------- ----------------- Edité Plus d'info:
Il se trouve DIV lui-même n'a pas été défini à plusieurs endroits. Mais X et Y ont été dans différents dossiers du répertoire parent dans lequel beaucoup d'applications existent.
a. Evertime je fais> faire; Je suppose que la valeur des directives du préprocesseur est recalculée?
b. L'une des dépendances du fichier make peut-elle être en cause? Si l'une des dépendances a un fichier d'en-tête différent avec x, Y est-il défini?
c. Comment se comporte la compilation d'une directive de préprocesseur dans le cas d'une structure de dossiers complexe comportant plusieurs en-têtes dans des répertoires différents avec X et Y définis?
|_ Child 1
|_ INC
|_ Header 2 with x and y defined
|_ Program 1 -> Has Header 2 included. X and Y defined.
|_ Child 2
|_ INC
|_ Header1 - Has X, Y & DIV defined
|_ Program 2 -> Has Header 1 included. Value of DIV calculated using X, Y of which header?
|_ Program 3 -> Has Header 1 included. Whats value of X, Y and DIV? Is it recalculated?
Maintenant, la valeur de DIV est très bien dans l'un des programmes et faux dans un autre!
Cela me semble comme DIV est redéfini. Essayez de régler DIV sur 2 et de relancer votre test. – user590028
Lorsque je règle manuellement la valeur sur 2, la valeur reste la même dans les deux fichiers. Cela signifie-t-il à coup sûr qu'il est redéfini? – theCuriousOne
Nous aurions besoin de voir plus de code (c'est-à-dire où la macro DIV est appelée et comment elle est utilisée) pour déterminer pourquoi vous recevez deux valeurs différentes pour ce qui est supposé être la même macro. – KillaBytes