Skip to content

函数(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;
}