MDK在头文件中使用预编译器时,#ifdef 无效的问题
问题:在头文件中使用预编译时,会出现无效的现象
在a.h文件中定义了宏AA_TEST,如下所示
#ifndef __A_H
#define __A_H
#define AA_TEST
#endif
在b.h文件中定义了宏BB_TEST,如下所示
#ifndef __B_H
#define __B_H
#include "a.h"
#if defined(AA_TEST)
#define BB_TEST
#endif
#endif
在c.c文件中的代码如下所示
#include "b.h"
#ifdef BB_TEST
const char *name;
#endif
现象:
编译后会发现name变量未编译,原因是b.h文件中的#define BB_TEST宏,未编译导致的。如下图所示:


从上图可知,在b.h文件中宏BB_TEST是已经编译了的,但是在c.c文件中的宏BB_TEST又是未定义的。
解决办法
我琢磨了很久,依然没有找到有效的办法,有知道的大佬可否告知一下,当然后期我发现解决办法后,也会修改笔记进行分享的。
目前我零时处理的方式:将a.h文件中的宏AA_TEST放在b.h文件中进行定义,虽然这样不是很友好,但是目前只能将就了。
MDK在头文件中使用预编译器时,#ifdef 无效的问题的更多相关文章
- C++头文件中预编译宏的目的
C++头文件中预编译宏的目的 eg: #ifndef _FACTORY_H_#define _FACTORY_H_......#endif //~_FACTORY_H_ 防止头文件被重复包含,导致变量 ...
- c语言头文件中定义全局变量的问题
c语言头文件中定义全局变量的问题 (转http://www.cnblogs.com/Sorean/) 先说一下,全局变量只能定义在 函数里面,任意函数,其他函数在使用的时候用extern声明.千万不要 ...
- c/c++头文件中#ifndef/#define/#endif的用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- [C++]关于头文件中的防卫式声明
大家知道,我们写.h文件时,通常会加上防卫式声明,有以下两种方式: 1. 宏定义 1 2 3 4 #ifndef _FILENAME_ #define _FILENAME_ //... #endif ...
- [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- C++-模板的声明和实现为何要放在头文件中
源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 ...
- [C/C++]在头文件中使用static定义变量意味着什么
文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const ...
- 在头文件中声明class 类 与 include类所在的头文件区别---理解
在头文件中声明class 类 与 include类所在的头文件的理解: 在头文件中,声明类 它告诉编译器:存在这样的类.而实际的类则可以位于同一个编译单元中,也可以放在其他编译单元中.没有这个类原型, ...
- c++ inline使函数实现可以在头文件中,避免多重定义错误
作者:Jon Lee链接:https://www.zhihu.com/question/53082910/answer/133612920来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...
- (转) [C++]我再也不想在任何头文件中看到using namespace xxx这种句子了(译)
原文的传送:I don’t want to see another “using namespace xxx;” in a header file ever again 转自 http://blog ...
随机推荐
- Kingbase 函数查询返回结果集
数据库使用过成中,时常会遇到需要返回一个结果集的情况,如何返回一个结果集,以及如何选择一个合适的方式返回结果集,是现场经常需要考虑的问题. 下面介绍KingbaseES中各种返回结果集的方式. 1.通 ...
- how to install local jar to maven repository
如何把maven不能引入的依赖安装到本地Repository: 1.比如fastdfs-client-java. <dependency> <groupId>org.csour ...
- linux下firefox用css配置把网页设置成黑白
网址输入 about:config 忽略警告 toolkit.legacyUserProfileCustomizations.stylesheets设置为true 在 /home/user/.mozi ...
- archlinux 时移(timeshift)不会自动创建快照
这是因为没有开启定时任务服务 解决办法 1.安装定时任务服务 sudo pacman -S cronie 2.设置自启动 sudo systemctl enble cronie
- 一个可以让你有更多时间摸鱼的WPF控件(二)
前言 上文介绍了如何通过一个Form自定义控件来简化数据的录入,并自动实现数据校验,自动布局排列等功能.本文继续介绍如何优化表格控件的使用,缩减代码量,实现工作效率的提升. 一.功能实现 上文中分析了 ...
- scala入门输出helloworld
1 object HelloScala{ 2 def main(args : Array[String]){ 3 println("hello scala") 4 } 5 } He ...
- 使用 Debian、Docker 和 Nginx 部署 Web 应用
前言 本文将介绍基于 Debian 的系统上使用 Docker 和 Nginx 进行 Web 应用部署的过程.着重介绍了 Debian.Docker 和 Nginx 的安装和配置. 第 1 步:更新和 ...
- 【开源三方库】Aki:一行代码极简体验JS&C++跨语言交互
开源项目 OpenHarmony 是每个人的 OpenHarmony 一.简介 OpenAtom OpenHarmony(以下简称"OpenHarmony")的前端开发语言是A ...
- Numpy线性计算
Numpy内置方法以及numpy.linalg模块可实现矩阵乘法.矩阵分解.矩阵行列式等线性代数的计算. In [1]: import numpy as np In [2]: x = np.arang ...
- wchar_t 字符拼接
wcscat(L"C:\\abc", L"\\GPR.log");