C语言是一门非常流行的编程语言,被许多平台选用,具有许多的优点.然而,正如人们常说的"事物都具有矛盾性",有利必有弊,在看到其种种优点之时,千万不要忽视其存在的不足和缺陷.下面的分析不是为了打击大家学习 C语言的积极性,而是为了使大家更好地了解和学习 C语言.
(1)C语言语法限制不太严格,程序设计自由度大."限制"与"灵活"是对立的,强调"灵活"就会放松"限制".这就对使用 C语言进行编程提出了更高的要求,程序员要对程序设计更熟悉.例如, C语言对数组下标越界不检查,容易造成数据在内存中的混乱.
首先讲一下函数调用,C语言函数调用的过程是:
①将参数压栈,一般是从右往左.
②使用call指令,调用函数.call指令会将当前指令所在的内存位置压栈以便函数结束后返回.
③进入函数体(跳转到另一块内存中),执行,执行完后,使用通用寄存器或者栈来存储返回值,使用ret指令返回.
可以看到,函数调用是发生了跳转的,考虑一下跳转大小和指令预取这些东西,调用函数会加长执行时间.如果只是调用几次,时间差异可能感觉不出来,不是特别情况也不需要在乎.但函数被反复调用时,性能就会差很多.
所以有了内联函数这玩意,编译器会直接将对内联函数的调用扩展为整个函数的代码(几种情况除外,这个看书,我也记不住),也就是说,不会使用call和ret指令.所以,这样做的缺点就是每个调用函数的位置都被扩展成了函数的代码,会加大生成的可执行文件的大小.所以才会提倡,将调用频繁而函数本身却很小的函数声明为内联函数.
它们的区别就今天这一节,跳转和不跳转,牺牲时间还是牺牲空间.
①..内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,所以呢一般比较小的函数才使用内联函数.
如果函数中包含有循环,switch或goto语句,递归函数,含有static的函数.
由此可以看出,内联函数和成员函数没什么区别,区别就在于怎样加快函数的执行速度而已.
速度是有代价的,inline和宏都是用空间换时间.
使用内联函数的时候要注意:
①递归函数不能定义为内联函数
c语言的优点就是它的性能极佳,其它编程语言几乎没有它的性能,所以呢它被用为linux操作系统设计语言.
c语言的缺点是太灵活,没有垃圾回收,代码不好编写.
c语言特别之处就是它的指针和结构体,这两个东西的存在让c语言变得异常强大,很多复杂的业务设计,都可以通过它们两个来实现,也可以说,只有掌握了指针和结构体,你才算入门c语言.
以上就是土嘎嘎小编为大家整理的c语言内联函数缺点相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!