C语言中宏定义与C++中的内联函数
分类:
IT文章
•
2025-01-14 13:01:01
一,宏定义:在预处理的时候把宏定义的内容替换到代码中,正常编译。
1,无参数宏定义和有参数宏定义
(1)宏定义不能加分号,比如:#define PI 3.24;错的,#define PI 3.24对的。
(2)带参数宏定义,注意参数用括号包起来,因为参数有可能表达式;宏名和形参之间不能有空格。
(3)带参数宏定义和带参数的函数,在使用时候有差别的。
带参数函数示例:
#include <stdio.h>
int SQ(int);
int main()
{
int i=1;
while(i<=5)
printf("%d
",SQ(i++));
return 0;
}
int SQ(int y)
{
return((y)*(y));
}
View Code
带参数宏定义示例:
#define SQ(y) ((y)*(y))
#include <stdio.h>
int main()
{
int i=1;
while(i<=5)
printf("%d
",SQ(i++));
return 0;
}
View Code
两个程序运行结果是不同的,分析知:使用函数时候,i值传给函数,return((i)*(i));;而宏定义直接替换,把i++传递给宏定义函数,SQ(i++) ((i++)*(i++))。因此结果不同。
(4)宏定义中"","#","#@"和"##", 在用#define 定义时 , 斜杠("")是用来续行的,"#"用来把参数转换成字符串,是给参数加上双引号。"##"则用来连接前后两个参数,把它们变成一个字符串,"#@"是给参数加上单引号。下面的例子会使您很容易理解。
#define Conn(x,y) x##y
#define ToChar(a) #@a
#define ToString(x) #x
二,内联函数:在编译阶段直接将内联函数内容插入目标代码,因此不用中断调用函数,加快程序执行速度,但是在每个调用函数地方用函数内容替换,加大空间的开销。
1,内联函数关键字是inline。inline是“定义的关键字”,而不是“声明的关键字”。
以下方式不对:
inline void Foo(int x, int y); // inline仅与函数声明放在一起
void Foo(int x, int y)
{
…
}
View Code