C语言的预处理常见问题(1)

前言

本次博客来自于第一次学习预处理是的一些笔记吧,大家且看且珍惜

c语言预处理


概念了解一下即可
我们了解一下程序是如何进行翻译和执行
程序的流程分为翻译环境和运行环境
翻译环境将.c文件转化为exe可运行文件
源文件->编译器->目标文件--------|
源文件->编译器->目标文件--------|
源文件->编译器->目标文件--------|
源文件->编译器->目标文件--------|
        .                       |
        .                       |
        .                       |
                            链接器
                              |->可执行程序
编译器中有编译操作
而编译分三个 1.预编译 2.编译 3.汇编
明天再打总操作现在直接进行的预编译的讲解
预定义符号
这里介绍4个,预定义符号有很多,还要自主学习
__FILE__ __LINE__ __DATE__ __TIME__//注意有两个'_'

int main()
{
    printf("%s\n", __FILE__);
    printf("%d\n", __LINE__);
    printf("%s\n", __DATE__);
    printf("%s\n", __TIME__);
    return 0;
}


上面代码是他们的基础使用
举例,我们可以用它写日志

int main()
{
    FILE* p = fopen("haha.txt", "w");
    if (p == NULL)
        return 0;
    int arr[10] = { 0 };
    for (int i = 0; i < 10; i++)
    {
        arr[i] = i;
        fprintf(p, "%s %d %s %s %d\n", __FILE__, __LINE__, __DATE__, __TIME__, i);
        printf("%s %d %s %s %d\n", __FILE__, __LINE__, __DATE__, __TIME__, i);
    }
    fclose(p);
    p = NULL;
    return 0;
}


文件可以留在vs里


预处理指令


#define  定义标识符
1.#define定义标识符 
该标识符可以是任意类型的数 或者字符串

#define AA 1.2
#define BB  "hahha"
#define CC 100
#define DD 5+5
int main()
{
    printf("%f %s %d %d", AA,BB,CC,DD);
    return 0;
}


2.当然#define还可以定义关键词

#define HH int
int main()
{
    HH c = 5;
    printf("%d", c);
    return 0;
}


3.#define还可以定义代码

#define HAHA {printf("nb\n");printf("jiayou\n");printf("666\n");}
int main()
{
    int a=20;
    if (a > 10)
    {
        HAHA
    }
    return 0;
}


写到这里我们应该明白 #define的一些注意事项
1.#define的使用中是把一个变量替换成另一个变量 有优先级问题
#define AAA 5+5
int main()
{
    printf("%d ", 5 * AAA + 5);
    return 0;
}
这里你是否会认为答案是55
 实际上 5*5+5+5=35 就是由于是直接转换过去
 当然了如果加上括号 结果就是50 #define AAA (5+5)

2#define注意不要添加;
比如 
#define ROW 10;
#define COL 10;
int main()
{
    int arr[ROW][COL] = { 0 };
}
这个程序就是错误的
4.#define还可以定义宏
1再看代码

#define JUEDUI(x) ((x)>0?(x):(-x))
int main()
{
    int i = 0;
    int arr[10] = { -1,-2,-3,-4,5,6,7,8,9,10};
    for (i = 0; i < 10; i++)
    {
        arr[i] = JUEDUI(arr[i]);
    }
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

总结

实际上,预处理还有还有一些条件编译,以及如何生成目标文件的过程

还是么有讲清楚,下次再说吧,这些笔记真是一个一个字纯手打的

呜呜呜,还是祝看到这的兄弟们,天天健康开心


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值