1-宏函数.c
#include <stdio.h>
#define PRINT printf("helloworld\n") //无参宏函数
#define P(s) printf("%s", s) //有参宏函数
#if 0
/*宏函数和自定义函数优缺点
宏函数优点:1、执行效率高 2、节省空间
自定义函数优点:1、编译效率高 2、安全
*/
#endif
#define SQR(X) (X) * (X)
int main()
{
PRINT;
P("hello\n");
//P(1);
int m = 1, n = 2;
printf("%d\n", SQR(m + n)); //替换成1 + 2 * 1 + 2
return 0;
}
2-static.c
#include <stdio.h>
void add()
{
static int i = 0; //静态变量,存放在静态数据区,函数结束不会被释放 栈空间在函数结束后会被释放
i++;
printf("i = %d\n", i);
}
int main()
{
int i;
for (i = 0; i < 3; i++)
{
add();
}
return 0;
}
3-const.c
#include <stdio.h>
char *mystrcpy(char *str, const char *ptr) //防止在函数内部修改指针指向的内存的值
{
char *t = str;
while ((*str++ = *ptr++) != '\0');
return t;
}
int main()
{
int num = 1;
//就近原则
const int *p1 = # //指针p1指向的内容不能修改,p1可以修改
p1++;
//(*p1)++;
int const *p2 = # //等价于const int *p1
int *const p3 = # //指针p3不能修改,但是p3指向的内容可以修改
//p3++;
(*p3)++;
const int *const p4 = # //指针p4不能修改,同时p4指向的内容也不能修改
char str[32] = "helloworld";
char ptr[32] = "12345";
mystrcpy(str, ptr);
printf("%s\n", str);
return 0;
}