Bootstrap

C语言·宏

老师上课有讲,但是教材没有。所以在此作笔记记录。

宏常量

#define A 10

#define STR "数字:"

printf("%s%d",STR,A);

输出结果——数字:10

宏语句

#define PRINT printf("数字:10");(此处如果有分号,则在调用时不用分号。没有就要分号)

PRINT

输出结果——数字:10

宏函数

#define PRINT(str) printf("%s",str)

PRINT("数字:10");

输出结果——数字:10

undef撤销宏定义

#define A 10

…………

…………

#undef A

以下A的定义就失效了

ifndef防止重复包含和编译

#ifndef <标识>——如果没有定义执行#define及其下面语句

#define <标识>

……

……

#endif——如果之前定义了,不执行#define,直接跳到#endif

标识的书写规则:一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线

#ifndef _STDIO_H_

ifdef

上文的ifndef全称应是——if not def,所以ifdef即如果定义了就执行其下语句

#ifdef

……

#else

……

#endif

换行符\

#define PRINT printf("1");\
              printf("2");

注意换行符前的分号,因为你在调用时,只能在宏的末尾加分号,所以换行符前要有分号

字符串化#

#define PRINT(str)\
{\
     printf(#str"的值是%d",str);\
}

int main()
{
   int x=1;
   int y=2;
   PRINT(x+y);
}

输出结果为:x+y的值是3

当#出现在宏中时,它会将后面的参数转换成字符串

片段连接符##

#define A(m,n)\
{\
   num##m+=n;\
}

int main()
{
    int num1=1;
    int m=1;
    int n=1;
    A(m,n);
}

num1的值最后为2

##就是强制连接符,在上述代码中num##m——num1

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;