首先我们要理解定义和声明的区别,举个常见的例子,比如有一个common.c文件中有这样一句话
int var = 7;
然后其对应的common.h文件中有这样一句:
int var;
那么上面一句叫做“定义”,下面一句叫“声明”。
定义为变量分配了存储空间,而声明没有。
声明可有多处,而定义只能在一处.声明不能做初始化.
下面是网友的话:
声明是告诉编译器“我存在!”。定义是告诉编译器“我是干什么的!”。
就象你去图书馆
声明:我们图书馆里有这本书。
定义:书的内容
在ucos2操作系统源码中,出现了全局宏定义这个东西,虽然初学起来有点困难,一但掌握,写起程序来会更灵活。
一个庞大的程序会有不少的全局变量存在,为了使代码整洁,将全局变量定义在了一个文件中,比如在common.c中。
#include "common.h"
int a = 10;
char buf[50] = "china";
a和buf就是全局变量。在common.h中对两个变量进行了声明,如下:
#ifndef COMMON_H_INCLUDED
#define COMMON_H_INCLUDED
#define OS_COMMON
int a;
char buf[50];
#endif // COMMON_H_INCLUDED
然后我如果想在main.c文件中使用他们,怎么办,可以直接用extern int a;声明外部变量,就可以用。也可以#include
“commmon.h” 然后就可以直接用了。在没有其他文件的干预下两种方法都可以,没有任何问题。但是,如果工程很庞大,main.c包含了若干个(很多个)头文件
//main.c
#include "a.h"
#include "b.h"
#include "c.h"
#include "d.h"
你知道这些模块中有没有包含过common.h呢。如果包含了,那么再extern int a;就会出错。
分享到:
相关推荐
平常在开发的时候会用到各种颜色RGB值定义,很多时候需要到绘图里查看各颜色的RGB值。该头文件把各种颜色进行了宏定义,使用时只要包含该头文件即可。 不仅能够加快开发速度,还能使颜色值更加明了,方便阅读代码。
基于QT的switch开关,采用QML的方式实现的
STM32无阻塞控制LED,可以设置LED占空比和闪烁次数,采用TIM精确定时,采用宏定义定义数字,全局变量在头文件中声明,采用静态全局变量避免变量暴露; 2. 使用说明: 通过修改宏定义可以修改开关时间; 通过查看...
这几天在整理和生产EMC单片机程序的一些宏,发现这东西真的是好用得超乎了想象,大大的简化了写程序时的重复劳动。以下以 EM78P260为主,其实其他型号大通小异,注意修改一下寄存器就可以。
宏定义、结构体定义、函数声明以及全局变量定义放到一个head.h头文件中 函数的定义放到head.cpp中 main函数放到main.cpp中 然而却报错了,提示xxx变量在*.obj文件中已定义 问题出现的原因 为什么会出现这种...
C语言常规优化策略 参数传递、宏定义、全局变量与汇
该文详细介绍了全局变量宏的定义,并给出了实例,对编程水平的提高有很大的帮助!
可以局方配置一个FTP服务器,...提供主进程调用接口的实现 main.c 进程主文件 Adapter.h 平台数据类型差异性移植定义文件 GlobConst.h 自动升级模块常量定义文件 Globdefine.h 自动升级全局宏定义文件
在你的项目的 .pch 全局宏定义文件中添加 #import "JRDropMenuView.h" 正式开始使用 1. 在你的ViewController视图控制器文件中添加 #import "JRDropMenuView.h" 2. 创建视图JRDropMenuView self.menuView = [...
以及上中下三册的电子书 pdf 。
今天小编就为大家分享一篇关于C语言宏定义结合全局变量的方法实现单片机串口透传模式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
头文件中一般放一些重复使用的代码,例如函数声明,变量声明,常数定义,宏的定义等等。当使用#i nclude语句将头文件引用时,相当于将头文件中所有内容,复制到#i nclude处。为了避免因为重复引用而导致的编译错误...
基于swift4.2常见的全局常量和函数集合(objective-c称之为宏定义,swift没有宏这个概念)
对实验数据分析表明,基于全局变量定义代价矩阵A大小的并行程序所获得的并行性能要优于基于宏参数定义矩阵A大小的并行程序的性能。这与相应的用宏参数定义矩阵A大小的串行程序性能要更优的结果相反。
通过修改宏定义可以修改开关时间; 通过查看头文件可以方便移植到不同硬件上; 3. 适合人群: 适合STM32学习者,或者STM32从业人员,便于积累功能模块,了解无阻塞设计方式;掌握静态全局变量,全局变量使用方法
本篇文章帮助你理解如下几个问题: 1. 翻译过程是如何进行的?... 也就是说宏定义中字符串如何支持国际化? 7. 类中字符串如何支持国际化. 8. 全局变量引用字符串如何支持国际化. 详细请阅读readme.txt 和把玩代码.
通过修改宏定义可以修改开关时间; 通过查看头文件可以方便移植到不同硬件上; 3. 适合人群: 适合STM32学习者,或者STM32从业人员,便于积累功能模块,了解无阻塞设计方式;掌握静态全局变量,全局变量使用方法 4...
对于程序中经常用到的一些常量或者简短的函数我们通常使用宏定义来处理,这样做的好处是对于程序中所有的配置我们可以统一在宏定义中进行管理,而且由于宏定义是在程序编译之前进行替换相比定义成全局变量或函数效率...
通过修改宏定义可以修改开关时间; 通过查看头文件可以方便移植到不同硬件上; 3. 适合人群: 适合STM32学习者,或者STM32从业人员,便于积累功能模块,了解无阻塞设计方式;掌握静态全局变量,全局变量使用方法
Linux RPM打包指南,特别是一些全局变量宏定义,供开发查询使用