函数(1)
约 496 字大约 2 分钟
2024-07-07
51.宏定义
#include <stdio.h>
#define A 2
#define B A+A
#define C (A+A)
#define D(a,b) (a)*(b)
int main(void)
{
printf("%d,%d,%d\n",A,B*B,C*C);
printf("%d\n",D(2,2+1));
return 0;
}
52.宏名之间重名
#include <stdio.h>
#define A 2
void f(void)
{
printf("%d\n",A);
}
#define B(a,b) a-b
void g(void)
{
printf("%d\n",B(5,2));
}
int main(void)
{
f();
g();
return 0;
}
53.undef终止宏的定义域
#include <stdio.h>
#define A 2
#define B(a,b) a+b
void f(void);
#undef A
#undef B
int main(void)
{
f();
// printf("%d,%d\n",A,B(4,1)); error 因为此处不属于宏名A,B的作用域
return 0;
}
void f(void)
{
printf("%d,%d",A,B(4,1)); // error 因为此处不属于宏名A,B的作用域
}
54.宏名与函数名重名
#include <stdio.h>
void F(int a) //如果放在宏名F后,该函数首部会被替换为void F(int a);printf("haha") 程序会报错
{
printf("%d",a);
}
#define F(a) F(a);printf("haha")
int main(void)
{
F(3); //该句会被替换为 F(3);printf("haha");
return 0;
}
55.函数的指针
#include <stdio.h>
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a>b?b:a;
}
int main(void)
{
int (*p)(int,int); //p是一个函数的指针变量,可以用来执行函数类型int,函数参数为两个整型的函数,p的类型为int (*) (int,int)
p=max; //p指向了max函数
printf("%d\n",(*p)(10,5)); //(*p)(10,5)等价于max(10,5)
p=min;
printf("%d\n",(*p)(10,5)); //(*p)(10,5)与p(10,5)等价
return 0;
}
56.auto变量与register
#include <stdio.h>
int main(void)
{
auto int a = 3; //int a = 3;默认情况下,a就是一个自动变量,所以auto可以不加,auto只能用于修饰局部变量
for(int i = 0;i<10000;++i);
register int j =2; //register只能修饰局部变量,但该变量不一定会成为寄存器变量,这需要编译器系统决定,一般也不使用该关键词
return 0;
}