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 ...
随机推荐
- 记录--关于无感刷新Token,我是这样子做的
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 什么是JWT JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可 ...
- MySQL备份还原工具
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Python爬虫爬取爱奇艺、腾讯视频电影相关信息(改进版)---团队第一阶段冲刺
爱奇艺 1 import time 2 import traceback 3 import requests 4 from lxml import etree 5 import re 6 from b ...
- 【已解决】Hadoop未知的主机名master
- C++ 互斥
mutex mutex 类是能用于保护共享数据免受从多个线程同时访问的同步原语. mutex 提供排他性非递归所有权语义: 调用方线程从它成功调用 lock 或 try_lock 开始,到它调用 un ...
- 链表栈(LinkedListStack)
链式栈:就是一种操作受限的单向链表,每次入栈一个元素,向链表中添加一个节点,出栈一个元素,释放一个节点.因为栈具有"后进先出"的特点,如果每次在链表的尾部进行插入和删除,就要遍 ...
- NodeJS 实战系列:模块设计与文件分类
我们从一个最简单的需求开始,来探索我们应该从哪些方面思考模块设计,以及如何将不同的文件分类.之所以说"思考",是因为我在这篇文章里更多的是提供一类解决问题的范式,而非统一的标准答案 ...
- Bootstrap实战 - 单页面网站
一.介绍 单页面结构简单.布局清晰,常常用来做手机 App 或者某个产品的下载介绍页面.现在,展示型网页整体趋向于单页网站设计,这样一次性把核心信息展现出来,对于用户来说更加直观和简单,能够快速了解一 ...
- OpenHarmony 3.2 Beta Audio——音频渲染
一.简介 Audio是多媒体子系统中的一个重要模块,其涉及的内容比较多,有音频的渲染.音频的采集.音频的策略管理等.本文主要针对音频渲染功能进行详细地分析,并通过源码中提供的例子,对音频渲染进行流程的 ...
- API 参考与帮助内容:一站式开发与使用者支援
API 文档 API 文档是旨在了解 API 详细信息的综合指南.通常,它们包括端点.请求示例.响应类别和示例以及错误代码等信息.API 文档可帮助开发人员了解 API 端点的具体细节,并了解如何将 ...