我们知道在 C 语言中,程序是由一个个的函数组成的。那么我们来看看函数的由来,程序 = 数据 + 算法 ==> C 程序 = 数据 + 函数;众所周知,C 语言是面向过程的一种编程语言,那么它就是采用的是模块化程序设计的思想。下面这张图更加形象的表示了 C 语言的特性
创新互联建站网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为网站设计、成都做网站,手机APP定制开发以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。创新互联建站深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!我们再来看看 C 语言中的模块化
那么面向过程的程序设计思想是怎样的呢?面向过程是一种以过程为中心的编程思想;首先将复杂的问题分解为一个个容易解决的问题,分解过后的问题可以按照步骤一步一步的完成。函数是面向过程在 C 语言中的体现,解决问题的每个步骤可以用函数来实现。
下来我们来看看一个有意思的问题,声明和定义一样吗?我们经常将函数声明和函数定义搞混,声明的意义在于告诉编译器程序单元的存在,定义则明确指示程序单元的意义。C 语言中通过 extern 进行重新单元的声明,一些程序单元在声明时可以省略 extern,严格意义上来说,声明和定义并不相同!
我们通过下面这份示例代码进行声明和定义的分析
test.c 源码
#include#include extern int g_var; extern struct Test; int main() { extern void f(int i, int j); extern int g(int x); struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test)); printf("p = %p\n", p); printf("g_var = %d\n", g_var); f(1, 2); printf("g(3) = %d\n", g(3)); free(p); return 0; }
global.c 源码
#includeint g_var = 10; struct Test { int x; int y; }; void f(int i, int j) { printf("i + j = %d\n", i + j); } int g(int x) { return (int)(2 * x + g_var); }
我们在 global.c 中定义了 g_var 变量,结构体 Test 和 函数 f() 及 g()。在 test.c 中分别声明了这些,并且使用了他们进行一些运算,我们来看看编译是否可以通过。
我们看到编译产生了一个警告,但是结果是正确的。在现代的 gcc 编译器中,已经优化了结构体的声明,也就是说,使用外部结构体的时候,不用使用 extern 关键字也可以。我们去掉 test.c 中第 6 行的 extern 关键字,编译也可以通过。如果我们将 global.c 中的 g_var 定义为 float,而在 test.c 中将它声明为 int 型,我们看看会打印出什么
我们看到了打印出的值非常大,所以声明和定义时完全不相同的。 通过对函数的学习,总结如下:1、函数是面向过程思想在 C 语言中的体现;2、面向过程是由上至下分解问题的设计方法;3、程序中的定义和声明完全不同,C 语言中通过 extern 对程序单元进行声明。
欢迎大家一起来学习 C 语言,可以加我QQ:243343083。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:C之函数的意义(三十八)-创新互联
网站地址:http://lswzjz.com/article/dpsggh.html