同一预处理器指令的值在一个文件中是正确的,而在另一个文件中是错误的
The value of the same preprocessor directive is correct in one file and wrong in another
我有一个 header 文件,其中 pre-processor 指令定义如下:
#define X 10
#define Y 5
#define DIV (X/Y)
现在我有两个不同的 C 文件,我已将此 header 包含在其中。
当我在这两个文件中打印this的值时,值是不一样的!该程序相当大,并且正在使用多个预处理器宏。
C 文件 #1
DIV 的值为 2
C 文件 #2
DIV 的值为 8!
为什么会这样?这是我第一次遇到这样的错误。这是编译器错误还是 make 文件错误?
是不是因为在另一个header中定义了DIV?还是有更深层次的问题?
---------------- 已编辑 -------------- 更多信息:
原来DIV本身很多地方都没有定义。但是X和Y一直在parent目录下的不同文件夹下,里面有很多应用。
一个。每次我做>制作;我假设重新计算预处理器指令的值?
b。 make 文件中的依赖项之一是否有问题?如果其中一个依赖项具有不同的 header 文件,其中定义了 x、Y?
c。如果一个复杂的文件夹结构在不同的目录中有多个 header 并定义了 X 和 Y,那么预处理器指令的编译行为如何?
|_ 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?
现在 DIV 的值在一个程序中是正确的,而在另一个程序中是错误的!
不,这不是 make 或编译器中的错误。这是您的 Makefile 或您的期望中的错误。遗憾的是,您提供的信息令人困惑,几乎毫无用处。首先,C 中的标识符区分大小写。你有时用x,有时用x,那不是很勤快
C 宏的扩展取决于 #define
和 #undef
指令的精确顺序,由 -Idirectory
选项的顺序控制。也可以使用 -DX=...
选项设置宏,覆盖 header 中的任何内容。您没有向我们展示执行判断的实际命令行。对于初学者,
find . -name '*.h' | xargs grep 'define.*X'
应该给出在哪里寻找 X
的定义的线索。
我有一个 header 文件,其中 pre-processor 指令定义如下:
#define X 10
#define Y 5
#define DIV (X/Y)
现在我有两个不同的 C 文件,我已将此 header 包含在其中。 当我在这两个文件中打印this的值时,值是不一样的!该程序相当大,并且正在使用多个预处理器宏。
C 文件 #1 DIV 的值为 2
C 文件 #2 DIV 的值为 8!
为什么会这样?这是我第一次遇到这样的错误。这是编译器错误还是 make 文件错误?
是不是因为在另一个header中定义了DIV?还是有更深层次的问题?
---------------- 已编辑 -------------- 更多信息:
原来DIV本身很多地方都没有定义。但是X和Y一直在parent目录下的不同文件夹下,里面有很多应用。
一个。每次我做>制作;我假设重新计算预处理器指令的值?
b。 make 文件中的依赖项之一是否有问题?如果其中一个依赖项具有不同的 header 文件,其中定义了 x、Y?
c。如果一个复杂的文件夹结构在不同的目录中有多个 header 并定义了 X 和 Y,那么预处理器指令的编译行为如何?
|_ 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?
现在 DIV 的值在一个程序中是正确的,而在另一个程序中是错误的!
不,这不是 make 或编译器中的错误。这是您的 Makefile 或您的期望中的错误。遗憾的是,您提供的信息令人困惑,几乎毫无用处。首先,C 中的标识符区分大小写。你有时用x,有时用x,那不是很勤快
C 宏的扩展取决于 #define
和 #undef
指令的精确顺序,由 -Idirectory
选项的顺序控制。也可以使用 -DX=...
选项设置宏,覆盖 header 中的任何内容。您没有向我们展示执行判断的实际命令行。对于初学者,
find . -name '*.h' | xargs grep 'define.*X'
应该给出在哪里寻找 X
的定义的线索。