内联函数和一些鲜为人知的技巧|学习笔记

简介: 快速学习内联函数和一些鲜为人知的技巧

开发者学堂课程【你的第一门 C 语言课内联函数和一些鲜为人知的技巧】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/444/detail/5490


内联函数和一些鲜为人知的技巧


目录:

一、 内联函数

二、 #和##

三、 可变参数


举例:

#include

int square(int x) ;

int square(int x)

{return x * x;}int main(void) { int i=1; while (i <= 100) { printf("%d的平方是 %d\n", i-1, squae(i++)); } return 0;

}

#include

#define SQUARE(x)((x)*(x))

int main(void)

{int i=1;while (i <= 100){printf("%d的平方是 %d\n", i-1, ((i++)* (i++));}return 0;

}


一、内联函数

图片48.png

引入内联函数来解决程序中函数调用的效率问题

所以我们应该把所有的函数都写成内联函数?

内联函数虽然节省了函数调用的时间消耗,但由于每一个函数出现的地方都要进行替换,因此增加了代码编译的时间。另外,并不是所有的函数都能够变成内联函数。

现在的编译器也很聪明,就算你不写 inline,它也会自动将一些函数优化成内联函数。

总结:编译器比你更了解哪些函数应该内联哪些不能内联,所以这个知识点你只需要知道就好


二、#和##

#和##是两个预处理运算符。

在带参数的宏定义中,#运算符后面应该跟一个参数,预处理器会把这个参数转换为一个字符串。

##运算符被称为记号连接运算符,比如我们可以使用##运算符连接两个参数。

#include #define STR(s) # sint main (void){printf("%d\n", STR(FISHC);

return 0;

}

#include #define STR(s) # sint main(void ){printf(STR(Hello %s num = %d), STR(FishC),)return 0;

}

#include #define TOGETHER(x, y) x ## y

int main (void){printf ("%d\n",TOGET(2,50));return 0 ;

}

 

三、可变参数

之前我们学习了如何让函数支持可变参数,带参数的宏定义也是使用可变参数的:
#define SHOWLIST(..) printf(# __VA_ ARGS__)

其中...表示使用可变参数,__VA_ ARGS__在预处理中被实际的参数集所替换。

#include #define SHOWLIST(...) printf(# __VA_ ARGS__)

int main (void ){SHOWLIST(FishC, 520,3.14\n);return 0 ;

}

#include

#define PRINT(format, ...) printf(# format, ## __VA_ARGS__)int main (void){PRINT(num = %d\n, 520) ;

PRINT(Hello FishC!\n);return 0;

}

相关文章
|
3月前
|
C语言 C++
C++(三)内联函数
本文介绍了C++中的内联函数概念及其与宏函数的区别。通过对比宏函数和普通函数,展示了内联函数在提高程序执行效率方面的优势。同时,详细解释了如何在C++中声明内联函数以及其适用场景,并给出了示例代码。内联函数能够减少函数调用开销,但在使用时需谨慎评估其对代码体积的影响。
|
5月前
|
算法 编译器 C++
C++基础知识(三:哑元和内联函数和函数重载)
在C++编程中,"哑元"这个术语虽然不常用,但可以理解为在函数定义或调用中使用的没有实际功能、仅作为占位符的参数。这种做法多见于模板编程或者为了匹配函数签名等场景。例如,在实现某些通用算法时,可能需要一个特定数量的参数来满足编译器要求,即使在特定情况下某些参数并不参与计算,这些参数就可以被视为哑元。
|
7月前
|
编译器 C++
内联函数
内联函数
42 1
|
6月前
|
编译器 C++ 开发者
什么是内联函数?
综上所述,内联函数在C++中是一种重要的优化手段,特别是在类定义中,通过内联简单的成员函数,可以提高程序的执行效率、代码的可读性和维护性,同时为编译器提供更多的优化机会。然而,需要注意的是,并不是所有函数都适合内联,具体情况需要根据函数的复杂度和实际需求进行权衡。
42 0
|
7月前
|
缓存 安全 编译器
你了解内联函数吗?
你了解内联函数吗?
|
7月前
|
编译器 C语言 C++
【C++】内联函数
【C++】内联函数
50 1
|
7月前
|
安全 编译器 C++
【c++】内联函数
【c++】内联函数
【c++】内联函数
|
7月前
|
编译器 C++
在C++语言中内联函数
在C++语言中内联函数
29 0
|
编译器 C++
C++内联函数
C++内联函数
41 0
|
编译器 数据库 C++