结构体内的#define宏定义

本文探讨了宏在C语言中的作用域特性,特别是宏定义在结构体内外的不同行为及其影响。文章解释了预处理阶段宏如何被替换,并讨论了在结构体内使用宏的原因。

关于宏的作用域

1.     宏没有可见域。

        如果说有,那就是从本文件(包括被包含的文件)中,该宏定义处开始,至文件的尾部或取消宏(#undef)为止。

2.     考虑一种特殊情况:

        一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?)

        定义在结构体之内的宏在结构体内可以隐藏定义在结构体之外定义的宏,如果都在结构体之外定义,那么就是定义了两个相同的宏,而一个在内,一个在外,则结构体内只看到内部定义的宏,而结构体外只看到外部定义的宏,跟变量的隐藏类似。

    宏的处理是在编译的预处理阶段完成的。预处理器根本就不认识什么结构体,在C语言编译器编译这个C文件中的结构体时,这个define语句已经不存在了。相应的,用到这个宏的地方,宏本身也已经替换成宏的值(这个宏展开)。大家可以用gcc -E命令来只做预处理而不编译,看看出来后的文件。

    至于为什么在结构体里头#deifne,是因为这个宏一般用于定义该结构体里头的标志位变量的可能的值,和结构体的这个变量密切相关。放在一起从逻辑上比较容易理解。


====

http://blog.youkuaiyun.com/shiniji_hh1126/article/details/6084658

/*********************************** old code ******************************************/ #if defined(CAM_ZYNQ_1200W) || defined(CAM_ZYNQ_1200W_1600w) #define CAM_IMG_HIGH 3072 #define CAM_IMG_WIDTH 4096 #define MAX_IMAGE_HEIGHT 3072 #define MAX_IMAGE_WIDTH 4096 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #elif defined(CAM_ZYNQ_1000W) #define CAM_IMG_HIGH 2460 #define CAM_IMG_WIDTH 4096 #define MAX_IMAGE_HEIGHT 2460 //按64位的要求取整后为2432 #define MAX_IMAGE_WIDTH 4096 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #elif defined(CAM_ZYNQ_230W) #define CAM_IMG_HIGH 1200 #define CAM_IMG_WIDTH 1920 #define MAX_IMAGE_HEIGHT 1200 #define MAX_IMAGE_WIDTH 1920 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #elif defined(CAM_ZYNQ_200W) #define CAM_IMG_HIGH 1200 #define CAM_IMG_WIDTH 1600 #define MAX_IMAGE_HEIGHT 1200 #define MAX_IMAGE_WIDTH 1600 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #elif defined(CAM_ZYNQ_4KLINE) #define CAM_IMG_HIGH 10240 #define CAM_IMG_WIDTH 4096 //Sensor本身最大宽4120,但受PL端JPG压缩模块对宽度64像素对齐限制,最大为4096 #define MAX_IMAGE_WIDTH 4096 #define MAX_IMAGE_HEIGHT 10240 #if !defined(E2V_TETRA_4K) #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 //此限制值与FPGA采集发送的一包数据量有关 #else #define MIN_IMAGE_HEIGHT 64 #define MIN_IMAGE_WIDTH 64 #endif //!defined(E2V_TETRA_4K) #elif defined(CAM_ZYNQ_8KLINE) #ifdef PL_NEW_MULTI_BUF_AND_SLICE #define CAM_IMG_HIGH 16504 #define CAM_IMG_WIDTH 8192 #define MAX_IMAGE_WIDTH 8192 #define MAX_IMAGE_HEIGHT 16504 //1.2米的宽度<==>8192,2米的长度<==> 13653, 最终比理论需求大一些,留了余量 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #else #define CAM_IMG_HIGH 10240 #define CAM_IMG_WIDTH 8192 //Sensor本身最大宽8240,但受PL端JPG压缩模块对宽度64像素对齐限制,最大为8192 #define MAX_IMAGE_WIDTH 8192 #define MAX_IMAGE_HEIGHT 10240 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #endif #elif defined(CAM_ZYNQ_2000W) #define CAM_IMG_WIDTH 5440//Sensor本身最大宽5480,FPGA因像素对齐需要,舍弃了一部分 #define CAM_IMG_HIGH 3648 #define MAX_IMAGE_WIDTH 5480 #define MAX_IMAGE_HEIGHT 3648 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #elif defined(CAM_ZYNQ_1800W) #define CAM_IMG_WIDTH 4480 #define CAM_IMG_HIGH 4096 #define MAX_IMAGE_WIDTH 4480 #define MAX_IMAGE_HEIGHT 4096 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #elif defined(CAM_ZYNQ_1200W_V1) #define CAM_IMG_WIDTH 3968 // Sensor本身最大宽4000,FPGA因像素对齐需要,舍弃了一部分 #define CAM_IMG_HIGH 2944 #define MAX_IMAGE_WIDTH 4000 #define MAX_IMAGE_HEIGHT 2944 #define MIN_IMAGE_HEIGHT 256 #define MIN_IMAGE_WIDTH 256 #else #error "please define camera type..." #endif /*********************************** new code ******************************************/ typedef struct CameraReslution { int cam_img_high; // 相机图像高度 int cam_img_width; // 相机图像宽度 int max_image_height; // 最大图像高度 int max_image_width; // 最大图像宽度 int min_image_height; // 最小图像高度 int min_image_width; // 最小图像宽度 } ResolutionConfig; // 声明获取相机配置的函数 ResolutionConfig getResolutionConfig(); ResolutionConfig getResolutionConfig() { ResolutionConfig conf = {0}; #if defined(CAM_ZYNQ_1200W) || defined(CAM_ZYNQ_1200W_1600w) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #elif defined(CAM_ZYNQ_1000W) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #elif defined(CAM_ZYNQ_230W) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #elif defined(CAM_ZYNQ_200W) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #elif defined(CAM_ZYNQ_4KLINE) conf.cam_img_high = 10240; conf.cam_img_width = 4096; conf.max_image_height = 10240; conf.max_image_width = 4096; #if !defined(E2V_TETRA_4K) conf.min_image_height = 256; conf.min_image_width = 256; #else conf.min_image_height = 64; conf.min_image_width = 64; #endif //!defined(E2V_TETRA_4K) #elif defined(CAM_ZYNQ_8KLINE) #ifdef PL_NEW_MULTI_BUF_AND_SLICE conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #else conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #endif #elif defined(CAM_ZYNQ_2000W) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #elif defined(CAM_ZYNQ_1800W) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #elif defined(CAM_ZYNQ_1200W_V1) conf.cam_img_high = ; conf.cam_img_width = ; conf.max_image_height = ; conf.max_image_width = ; conf.min_image_height = ; conf.min_image_width = ; #else #error "please define camera type..." #endif return conf; }; /////new code是否将图像信息封装到了hal层?
09-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值