内联函数的使用,该怎么处理
内联函数的使用
看书看到内联函数讲内联函数并不是真的发生函数调用,而是把内联函数代码嵌入到调用点处。所以写了一段代码测试一下。但是却发现程序最后的打印语句并没有打印将printf函数语句嵌入到main函数中的位置,而就是他本身的位置。这不就说明他没有发生嵌入吗?求大神指导
------解决思路----------------------
编译的第一步是预处理,其中一个任务就是宏替换,把__FILE__之类的就都替换掉了。内联的时候__LINE__已经被替换掉了,怎么联都是个常数
编译器看到的代码是这样的:
$ gcc -E test.c
# 1 "test.c"
# 1 "<command-line>"
# 1 "test.c"
inline void print()
{
printf( "%s %d %s\n" , "test.c" , 6 , __FUNCTION__ );
}
int main( void )
{
print();
return 0;
}
看书看到内联函数讲内联函数并不是真的发生函数调用,而是把内联函数代码嵌入到调用点处。所以写了一段代码测试一下。但是却发现程序最后的打印语句并没有打印将printf函数语句嵌入到main函数中的位置,而就是他本身的位置。这不就说明他没有发生嵌入吗?求大神指导
#include <cstdio>
#include <cstdlib>
inline void print()
{
printf( "%s %d %s\n" , __FILE__ , __LINE__ , __FUNCTION__ );
}
int main( void )
{
print();
return 0;
}
------解决思路----------------------
编译的第一步是预处理,其中一个任务就是宏替换,把__FILE__之类的就都替换掉了。内联的时候__LINE__已经被替换掉了,怎么联都是个常数
编译器看到的代码是这样的:
$ gcc -E test.c
# 1 "test.c"
# 1 "<command-line>"
# 1 "test.c"
inline void print()
{
printf( "%s %d %s\n" , "test.c" , 6 , __FUNCTION__ );
}
int main( void )
{
print();
return 0;
}