佛山企业推广优化,定西seo排名,广州网页制作网站维护,ip达1万的网站怎么做由C语言发展而来的一种面向对象的编程语言。
第一部分、从C语言到C
本章讲述 C 语言的简史#xff0c;以及 C 语言中与面向对象关系不大、C语言中没有的特性。这些特性能够增加编程的便利性#xff0c;提高程序的可扩充性。
十三、如何规范地使用C内联函数
inline 关键字…
由C语言发展而来的一种面向对象的编程语言。
第一部分、从C语言到C
本章讲述 C 语言的简史以及 C 语言中与面向对象关系不大、C语言中没有的特性。这些特性能够增加编程的便利性提高程序的可扩充性。
十三、如何规范地使用C内联函数
inline 关键字可以只在函数定义处添加也可以只在函数声明处添加也可以同时添加但是在函数声明处添加 inline 关键字是无效的编译器会忽略函数声明处的 inline 关键字。也就是说inline 是一种“用于实现的关键字”而不是一种“用于声明的关键字”。 尽管大多数教科书中在函数声明和函数定义处都增加了 inline 关键字但我认为 inline 关键字不应该出现在函数声明处。这个细节虽然不会影响函数的功能但是体现了高质量 C 程序设计风格的一个基本原则声明与定义不可混为一谈用户没有必要、也不应该知道函数是否需要内联。更为严格地说内联函数不应该有声明应该将函数定义放在本应该出现函数声明的地方这是一种良好的编程风格。 在多文件编程中我们通常将函数的定义放在源文件中将函数的声明放在头文件中希望调用函数时引入对应的头文件即可我们鼓励这种将函数定义和函数声明分开的做法。但这种做法不适用于内联函数将内联函数的声明和定义分散到不同的文件中会出错请看下面的例子。 main.cpp 代码 #include iostream
using namespace std;//内联函数声明
void func();int main(){func();return 0;
} module.cpp 代码 #include iostream
using namespace std;//内联函数定义
inline void func(){coutinline functionendl;
} 上面的代码能够正常编译但在链接时会出错。func() 是内联函数编译期间会用它来替换函数调用处编译完成后函数就不存在了链接器在将多个目标文件.o或.obj文件合并成一个可执行文件时找不到 func() 函数的定义所以会产生链接错误。
内联函数虽然叫做函数在定义和声明的语法上也和普通函数一样但它已经失去了函数的本质。函数是一段可以重复使用的代码它位于虚拟地址空间中的代码区也占用可执行文件的体积而内联函数的代码在编译后就被消除了不存在于虚拟地址空间中没法重复使用。
如果你对虚拟地址空间或代码区的概念不了解请阅读 《C语言内存精讲》专题。 内联函数看起来简单但是有很多细节需要注意从代码重复利用的角度讲内联函数已经不再是函数了。我认为将内联函数作为带参宏的替代方案更为靠谱而不是真的当做函数使用。 在多文件编程时我建议将内联函数的定义直接放在头文件中并且禁用内联函数的声明声明是多此一举。 十四、C函数的默认参数详解
在C 中定义函数时可以给形参指定一个默认的值这样调用函数时如果没有给这个形参赋值没有对应的实参那么就使用这个默认的值。也就是说调用函数时可以省略有默认值的参数。如果用户指定了参数的值那么就使用用户指定的值否则使用参数的默认值。所谓默认参数指的是当函数调用中省略了实参时自动使用的一个值这个值就是给形参指定的默认值。下面是一个简单的示例 #includeiostream
using namespace std;//带默认参数的函数
void func(int n, float b1.2, char c){coutn, b, cendl;
}int main(){//为所有参数传值func(10, 3.5, #);//为n、b传值相当于调用func(20, 9.8, )func(20, 9.8);//只为n传值相当于调用func(30, 1.2, )func(30);return 0;
} 运行结果 10, 3.5, # 20, 9.8, 30, 1.2, 本例定义了一个带有默认参数的函数 func()并在 main() 函数中进行了不同形式的调用。为参数指定默认值非常简单直接在形参列表中赋值即可与定义普通变量的形式类似。 指定了默认参数后调用函数时就可以省略对应的实参了。 默认参数除了使用数值常量指定也可以使用表达式指定例如 float d 10.8; void func(int n, float bd2.9, char c){ coutn, b, cendl; } C规定默认参数只能放在形参列表的最后而且一旦为某个形参指定了默认值那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的默认参数的连续性是保证正确传参的前提。 下面的写法是正确的 void func(int a, int b10, int c20){ } void func(int a, int b, int c20){ } 但这样写不可以 void func(int a, int b10, int c20, int d){ } void func(int a, int b10, int c, int d20){ } 默认参数并非编程方面的重大突破而只是提供了一种便捷的方式。在以后设计类时你将发现通过使用默认参数可以减少要定义的析构函数、方法以及方法重载的数量。 本节的例子中我们在函数定义处指定了默认参数。除了函数定义你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂很多书籍也对这点含糊其辞我们将在下节《十五、到底在声明中还是定义中指定默认参数》中详细讲解。