C语言基础——预处理指令

本文详细介绍了C语言中的预处理指令,包括宏定义、文件包含及条件编译等内容,并通过实例展示了这些指令的具体用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预处理指令

预处理指令:编译之前进行解析处理的指令
源码-> 编译预处理 -》 编译 -》链接 ->运行
所有预处理指令都是以#开头
所有的预处理指令都不需要分号
所有的预处理指针都可以写文件任意位置
1、宏定义 2、文件包含 3、条件编译

    宏定义:不带参数宏定义 和 带参数宏定义

    不带参数的宏定义:
    #define 宏名 值
    宏名的命名规则:1、全部大写多个单词中间使用_分割    2、以k开头驼峰标示
    作用:在编译预处理的时候把代码中所有出现宏名地方都替换为宏名后面值
    好处:提高代码可读性
    宏定义的作用域是从定义的哪一行开始直到文件结束

    带参数宏定义
带参数宏定义的格式: #define 宏名(参数列表)  参数表达式
带参数的宏定义的参数列表是没有类型的
宏名与后面小括号中间不可以有空格,如果加上空格就是不带参数宏定义
宏定义非常单纯,就是一个替换操作
我们定义带参数宏的时候,后边表达式所有的操作数与结果都加上小括号
可以变参数宏定义

#define SUM(num1,num2) (num1 + num2)
#define MULTIPLY(num1,num2) ((num1) * (num2))
#define LOG(format,...)  printf(format,## __VA_ARGS__)
//...表示可变参数
//## 表示后参数是可有可无的
int main(int argc, const char * argv[]){
    int s = sum(10,20);
    //    s  =  SUM(2,2) * SUM(2, 2);
    //    (10)  * (2 + 2) / (2 + 2) * (10)
    int result = MULTIPLY(10, 2+2) / MULTIPLY(2 + 2, 10);
    printf("result = %d\n",result);
//    LOG("a = %d,b = %d \n",10,20);
    LOG("hello\n");

    return 0;
}

条件编译

//if在程序运行时候来判断是否满足条件表达式,如果满足条件表达式就执行相应的代码块
//条件编译的格式
  条件编译的使用方式与if语句相同
  条件编译:在预编译的时候,如果条件满足就将代码编译到.o文件中
  #if 条件表达
    语句;
    ...
  #endif;
 注意点:1、条件编译不需要大括号
        2、必须以#endif结尾
        3、条件表达式中仅可以使用常量和宏
 
 1、被注释的语句不参与编译
 2、只有满足条件才会参与编译

 
 #define A  5
int main(int argc, const char * argv[])
{
   
//    int a = 5;
//    if (a == 10) {
//        printf("a = 10\n");
//    }else if(a == 5){
//        printf("a = 5\n");
//    }else{
//        printf("other\n");
//    }

#if A == 10
   printf("a = 10\n");
#elif A == 5
    printf("a = 5\n");
#else
   printf("other\n");
#endif
    
    
//#define  DBUG 0
    
#if  DBUG == 1
#define Log(format,...) printf(format,## __VA_ARGS__)
#else
#define Log(format,...)
#endif
    
//    Log("输出日志 a = %d\n",10);

    条件编译的变体

// 如果定义了 DBUG 宏就编译下面的语句
#if defined(DBUG)
    printf("DBUG");
#else
   printf("release\n");
#endif

//#if ndefined(DBUG)

#ifdef DBUG
      printf("DBUG");
#endif
    
#ifndef DBUG
    printf("没有定义 DBUG\n");
#endif
    
    return 0;
}

文件包含

/*
    #include 作用是拷贝文件
    #include "" 包含我们自己写的头文件
    #include <> 系统自带的头文件
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值