我是大甲鱼 发表于 2017-8-30 20:09:53

关于define的嵌套 问题

本帖最后由 我是大甲鱼 于 2017-8-30 20:09 编辑

#ifndef __CAMERA_H__
#define __CAMERA_H__
#include "headfile.h"

//#definerow60   //行
//#definerank80//列

#definerowOV7725_H//行
#definerank OV7725_W//列


我用的模块化编程OV7725_H和OV7725_W在其他的头文件已经define 过了,而且头文件已经包含,
可是在编译的时候提示:
Error: identifier "OV7725_H" is undefined D:\摄像头实验\Projecct\USER\inc\CAMERA.h 13
Error: identifier "OV7725_W" is undefined D:\摄像头实验\Projecct\USER\inc\CAMERA.h 13

像下面这样写又不会报错
#definerow60   //行
#definerank80//列

ba21 发表于 2017-8-31 12:52:08

宏定义是预编译指令、只对当前源文件执行文本替换操作?宏指令及预编译阶段根本就不属于编译过程,有名字你叫的“预编译”,就是在编译之前

我是大甲鱼 发表于 2017-8-31 16:13:37

ba21 发表于 2017-8-31 12:52
宏定义是预编译指令、只对当前源文件执行文本替换操作?宏指令及预编译阶段根本就不属于编译过程,有名字你 ...

那么错误是出在哪里 ?大佬

ba21 发表于 2017-8-31 18:03:30

我是大甲鱼 发表于 2017-8-31 16:13
那么错误是出在哪里 ?大佬

大佬意思就是宏定义只对当前文件生效

只对当前源文件执行文本替换操作

我是大甲鱼 发表于 2017-9-1 08:55:56

ba21 发表于 2017-8-31 18:03
大佬意思就是宏定义只对当前文件生效

只对当前源文件执行文本替换操作

有没有什么办法可以解决这个问题呢
{:10_243:}

ba21 发表于 2017-9-1 09:43:17

我是大甲鱼 发表于 2017-9-1 08:55
有没有什么办法可以解决这个问题呢

有。期待大神你开发个国产C。

我是大甲鱼 发表于 2017-9-1 11:06:56

ba21 发表于 2017-9-1 09:43
有。期待大神你开发个国产C。

这就非常难为我了

ba21 发表于 2017-9-1 11:31:15

我是大甲鱼 发表于 2017-9-1 11:06
这就非常难为我了

{:5_106:}看你的了

windskyy 发表于 2017-9-1 17:24:03

本帖最后由 windskyy 于 2017-9-1 18:17 编辑

嵌套宏应该是没问题的, 只是由于预处理顺序问题. 使得你的CAMERA.h 文件预处理比headfile.h早 .这样编译器在解析到`OV7725_H`和`OV7725_W`时, 根本没有它们的定义...就会有这样 的报错了.


//比如, 我在test.h中有宏
#define MAX 1024
//在demo.h 中有包括test.h
#include "test.h"   // 需要在宏前面..
#define F_MAX MAX
//在源文件mian.c中只
#include "demo.h"

这样编译没有报错....

ps.测试环境.gcc (Debian 6.3.0-18) 6.3.0 20170516

我是大甲鱼 发表于 2017-9-2 13:59:29

windskyy 发表于 2017-9-1 17:24
嵌套宏应该是没问题的, 只是由于预处理顺序问题. 使得你的CAMERA.h 文件预处理比headfile.h早 .这样编译器 ...

我想到过顺序的问题可是就是无法解决它。最后还是只有用数字代替,但是修改程序就比较麻烦
页: [1]
查看完整版本: 关于define的嵌套 问题