ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

全局变量 宏 大程序结构

2021-12-06 23:59:14  阅读:174  来源: 互联网

标签:全局变量 函数 程序结构 编译 本地 源代码 变量


1.全局变量

1.1 全局变量的定义

定义在函数外面的变量是全局变量

全局变量具有全局的生存期和作用域

他们与任何函数无关

在任何函数内部都可以使用它们

 1.2 全局变量初始化

没有做初始化的全局变量会得到0值

指针会得到NULL值

只能用编译时刻已知的值来初始化全局变量

它们的初始化发生在main函数之前

1.3 被隐藏的全局变量 

如果函数内部存在与全局变量同名的变量,则全局变量被隐藏

2.静态本地变量

在本地变量定义时加上static修饰符就成为静态本地变量

(important)当函数离开的时候,静态本地变量会继续存在并保持其值

静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值

静态本地变量实际上是特殊的全局变量

它们位于相同的内存空间

静态本地变量具有全局的生存域,函数内的局部作用域

static在这里的意思是 局部作用域(本地可访问)

 3.返回指针的函数

返回本地变量的地址是危险的

返回全局变量或静态本地变量的地址是安全的

返回在函数内mallac的内存是安全的,但容易造成问题

最好的做法是返回传入的指针

4.tips

不要使用全局变量在函数间传递参数和结果

尽量避免使用全局变量 

5.编译预处理指令 

#开头的是编译预处理指令

它们不是C语言的成分

#define用来定义一个宏 

6.宏

6.1 定义

#define <名字> <值>

注意结尾没有分号 因为他不是c的语句

名字必须是一个单词,值可以是各种东西

在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值

是完全的文本替换

如果一个宏的值中有其他宏的名字,也是会被替换的

如果一个宏的值超过一行,最后一行之前的行末需要加上\

6.2 没有值的宏 

#define_DEBUG

这类宏是用于条件编译的,后面有其他的编译

预处理指令来检查这个宏是否已经被定义过了

6.3 带参数的宏(像函数) 

一切都要带括号

整个值要括号

参数出现的每个地方都要括号

在大型程序的代码中使用非常普遍 

7.大程序结构 

7.1 多个.c文件

main()里的代码太长了适合分成几个函数

一个源代码文件太长了适合分成几个文件

两个独立的源代码文件不能编译形成可执行的程序

7.2 编译单元

一个.c文件是一个编译单元

编译器每次编译只处理一个编译单元

7.3 项目

在Dev C++中新建一个项目,然后把几个源代码文件加入进去

 对于项目,Dev C++的编译会把一个项目中所有的源代码文件都编译后,链接起来

有的IDE有分开的编译和构建两个按钮,前者是对单个源代码文件编译,后者是对整个项目做链接

8.头文件

8.1 函数原型

如果不给出函数原型,编译器会猜测你说调用的函数的所有参数都是int 返回类型也是int

编译器在编译的时候只看当前的一个编译单元,他不会去看同一个项目中其他编译单元以找出那个函数的原型

 8.2  头文件

把函数原型放到一个头文件(以.h结尾)中,在需要调用这个函数的源代码文件(.c文件)中#include这个头文件里

8.3  #include 

#include是一个编译预处理指令,和宏一样,在编译之前就处理了

文本复制

 

 

标签:全局变量,函数,程序结构,编译,本地,源代码,变量
来源: https://blog.csdn.net/m0_62309595/article/details/121705825

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有