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

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

开发者学堂课程【你的第一门 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;

}

相关文章
|
2月前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
32 0
|
2月前
|
编译器 C++
内联函数
内联函数
15 1
|
19天前
|
编译器 C++ 开发者
什么是内联函数?
综上所述,内联函数在C++中是一种重要的优化手段,特别是在类定义中,通过内联简单的成员函数,可以提高程序的执行效率、代码的可读性和维护性,同时为编译器提供更多的优化机会。然而,需要注意的是,并不是所有函数都适合内联,具体情况需要根据函数的复杂度和实际需求进行权衡。
8 0
|
2月前
|
缓存 安全 编译器
你了解内联函数吗?
你了解内联函数吗?
|
2月前
|
编译器 C语言 C++
【C++】内联函数
【C++】内联函数
27 1
|
2月前
|
安全 编译器 C++
【c++】内联函数
【c++】内联函数
【c++】内联函数
|
2月前
|
编译器 C++
在C++语言中内联函数
在C++语言中内联函数
13 0
|
7月前
|
编译器 C++
C++内联函数
C++内联函数
27 0
|
8月前
|
编译器 数据库 C++
|
8月前
|
安全 编译器 C++
C++入门(3):引用,内联函数
C++入门(3):引用,内联函数