鱼C论坛

 找回密码
 立即注册
查看: 3361|回复: 9

关于define的嵌套 问题

[复制链接]
发表于 2017-8-30 20:09:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

//#define  row  60   //行
//#define  rank  80  //列

#define  row  OV7725_H  //行
#define  rank OV7725_W  //列


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

像下面这样写又不会报错
#define  row  60   //行
#define  rank  80  //列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-31 12:52:08 | 显示全部楼层
宏定义是预编译指令、只对当前源文件执行文本替换操作?宏指令及预编译阶段根本就不属于编译过程,有名字你叫的“预编译”,就是在编译之前

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那么错误是出在哪里 ?大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-31 18:03:30 | 显示全部楼层
我是大甲鱼 发表于 2017-8-31 16:13
那么错误是出在哪里 ?大佬

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

只对当前源文件执行文本替换操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-1 08:55:56 | 显示全部楼层
ba21 发表于 2017-8-31 18:03
大佬意思就是宏定义只对当前文件生效

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

有没有什么办法可以解决这个问题呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-1 09:43:17 | 显示全部楼层
我是大甲鱼 发表于 2017-9-1 08:55
有没有什么办法可以解决这个问题呢

有。期待大神你开发个国产C。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-1 11:06:56 | 显示全部楼层
ba21 发表于 2017-9-1 09:43
有。期待大神你开发个国产C。

这就非常难为我了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-1 11:31:15 | 显示全部楼层

看你的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-1 17:24:03 | 显示全部楼层
本帖最后由 windskyy 于 2017-9-1 18:17 编辑

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


  1. //比如, 我在test.h中有宏
  2. #define MAX 1024
  3. //在demo.h 中有包括test.h
  4. #include "test.h"   // 需要在宏前面..
  5. #define F_MAX MAX
  6. //在源文件mian.c中只
  7. #include "demo.h"
复制代码


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

ps.测试环境.  gcc (Debian 6.3.0-18) 6.3.0 20170516
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-2 13:59:29 | 显示全部楼层
windskyy 发表于 2017-9-1 17:24
嵌套宏应该是没问题的, 只是由于预处理顺序问题. 使得你的CAMERA.h 文件预处理比headfile.h早 .这样编译器 ...

我想到过顺序的问题可是就是无法解决它。  最后还是只有用数字代替,但是修改程序就比较麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表