C/C++语言构成

C/C++语言构成

-》一个工程包含多个源程序

-》每一个源程序包含多个.c或.cpp文件

-》.c/.cpp文件又叫做:模块、文档、一个源程序文件、源文件、.c/.cpp

c++中一般把一个类封装在一个.cpp文件中,作为一个模块使用,在.h文件中定义,在.cpp中实现

-》.c/.cpp又包含多个函数和变量

-》函数体内的变量叫做局部变量,加了static叫做静态局部变量

函数体之外,.c/.cpp之内的变量叫做全局变量,加了static叫做静态全局变量,全局变量又叫做外部变量

1、外部变量和全局变量的区别?

参考链接:https://zhidao.baidu.com/question/1795695107848265667.html

全局变量也称为外部变量,它是在函数外部定义的变量。

它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。 有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域。 也可用static声明外部变量,使该变量不能被其他文件引用。有时候他们是一样的,只有稍微一点的区别而已,不用太过于区分的

2、c语言是模块化编程的工具,模块如何组织,模块之间如何交互应该是个大问题。我觉得有以下几个值得注意的地方

参考链接:https://zhidao.baidu.com/question/1516329137318348580.html

1、每个源文件就是一个独立的模块,它应该能够在不连接任何其它模块、不需要其它源文件的情况下独立编译。
2、模块之间是通过函数、常量、变量、结构定义、宏(似乎也是常量的一种)进行交互的
3、每个模块应该包括导入和导出两个部分,比如要调用另外一个模块的函数foo(),需要extern int foo();
这应该属于模块的导入部分
而由该模块提供的函数,应该在相应的头文件中声明,作为模块的导出部分。
模块的导出部分应该放在该模块的头文件中。
4、如果只在本模块使用的变量,在本模块中定义成static的就可以了;否则就是全局变量,全局变量在头文件中声明一下,同时也作为模块的导出部分。
5、宏既可以定义在头文件中,也可以定义在源文件中。如果宏只是模块中用到,相当于局部常量,放到源文件中好了;如果其它模块也要用到,那么把它放到头文件中去。
6、结构定义似乎都放在头文件中。是不是应该另外有一个头文件,专门用来定义结构???

3、extern、static、.global?

extern: 比如要调用另外一个模块的函数foo(),需要extern int foo();,用于导入一个模块使用,由外用到内

global: 用来声明本变量或函数可以被外部调用,由内用到外

static: 改变变量或函数的作用域

猜你喜欢

转载自blog.csdn.net/a1809032425/article/details/100640969