前言

在项目中,遇到一个问题,发现一个文件里有2个同样的宏名,并且替代的值相同,可能是前面不小心多复制了一次导致;

但是这里也值得深思和考虑,如果在一个项目中,不小心定义2个相同宏名,但是值不一样的现象呢?

分析

按照自我分析,宏只是在预处理阶段进行“替换操作”的作用,也就是说如果存在2个相同宏名,是可以进行编译的,但是应该会有警告信息;

实践


从上述结果来看,相同宏名可执行,但是由于在预处理是按顺序执行的,也就是说,前面替换完成后,在后面的过程中,会覆盖前面的替换,导致重复定义宏名的值被改变,造成以上的现象;

反思

  1. 宏名不要重复,采用纯大写+尽量全的定义来声明,这样不太容易重名
  2. 宏名在定义的时候,可以设置其作用域,确定其替换范围,做到可控性;
  3. 如果外部不需要宏,尽量减少在头文件中进行宏的定义!
  4. 一些编写宏的注意点要实施,注意规范。

关于宏重复定义的问题分析相关推荐

  1. c语言中宏调用比函数调用,C语言-宏定义与使用分析

    1.C语言中的宏定义 #define是预处理器处理的单元实体之- #define定义的宏可以出现在程序的任意位置 #define定义之后的代码都可以使用这个宏 2.定义宏常量 #define定义的宏常 ...

  2. C++ link2005 error 错误 解决方法汇总(一般重复定义,如果都是不就是 函数定义和实现没有分离)...

    一般都是重复定义. 可以按照VS给出的信息去找相关的变量或者宏定义,还有函数. 这里需要注意include,不要重复include,不要重复定义宏. 但上述这些,都是很好理解的-- 如果大家按照上边说 ...

  3. link2005 重复定义错误

    造成LNK2005错误主要有以下几种情况:  1.重复定义全局变量. 对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下.其实这是错误的,全局变量是针对整个工程的. 正 ...

  4. extern 用法,全局变量与头文件(重复定义)

    转自 https://www.cnblogs.com/chengmin/archive/2011/09/26/2192008.html 当你要引用一个全局变量的时候,你就要声明,extern int  ...

  5. MER:1.8万字带你系统了解宏组学实验与分析(高通量测序应用于病原体和害虫诊断——综述与实用性建议)...

    高通量测序应用于病原体和害虫诊断--综述与实用性建议 High‐throughput identification and diagnostics of pathogens and pests: Ov ...

  6. 宏重定义 头问题重定义解决办法

    头问题件重定义: 头文件重复包含的问题往往是重定义的问题.下面我们有两种方式解决头文件的重复包含:一个是条件编译的#ifndef...#endif 和 #pragma once. 例如采用: #ifn ...

  7. Vs2005下重复定义的问题解决

    Vs2005下重复定义的问题解决 ... already defined in ... IT笔记 2009-06-05 10:49:54 阅读166 评论0  字号:大中小 订阅 这几天为VS2005 ...

  8. VS中重复定义的解决方法

    error LNK2005: _DllMain@12 already defined in MSVC 方案一. 编程中经常能遇到LNK2005错误--重复定义错误,其实LNK2005错误并不是一个很难 ...

  9. Vs2005下重复定义的问题解决 ... already defined in ...

    方案一. 编程中经常能遇到LNK2005错误--重复定义错误,其实LNK2005错误并不是一个很难解决的错误.弄清楚它形成的原因,就可以轻松解决它了.         造成LNK2005错误主要有以下 ...

最新文章

  1. java NIO概述
  2. 【网址收藏】WIN10下docker docker-compose docker-machine的安装与使用
  3. button按钮跳转JS代码
  4. Docker(二)-在Docker中部署Nginx实现负载均衡(视频)
  5. ios 主题切换 思路_iOS 使用 NSObject 的分类实现快速切换主题
  6. golang rpc单参数调用实例
  7. window.location.href如何多次请求_何为幂等?如何设计?
  8. SAP License:COPA特性值转换
  9. 路由器 android 打印机,谷歌关闭云打印服务,安卓和Chrome办公用户要慌了
  10. 如法炮制的意思,成语如法炮制的炮什么意思?
  11. 查看数值类型python_python怎么看数据类型
  12. 8. 字符串转整数 (atoi)
  13. python random函数sample_Python random.sample()用法及代码示例
  14. 高中数学必修一,集合知识概念运算归纳总结
  15. ReactNative 公共脱敏处理js 包括银行卡 身份证号 手机号企业名称 营业执照 邮箱号码 等等
  16. 51智能小车pwm调速
  17. 针对谷氨酰胺运输体的小分子抑制剂
  18. sublimelinter php,sublime text 3 在Windows下配置sublimelinter-php的路径问题
  19. 一个网页浏览请求的数据通信过程(数通基础学习笔记)
  20. Google Play开发者账号被封,损失惨重!又是账号关联!!

热门文章

  1. 男女Java_梦幻都市-心动男女
  2. 关于conda无法创建新环境的解决方法(路径或channel)
  3. 人脸数据集(电视剧生活大爆炸)
  4. 墨西哥萨卡特卡斯将举行GNOME GUADEC 2020 峰会
  5. pagerank 的介绍
  6. Android Audio常用音频工具和分析方法
  7. Cortex-M CPU架构基础
  8. 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第二周作业
  9. 既已开始,就风雨兼程
  10. iOS逆向环境以及常用命令行(逆向一)