学ios需要了解的C语言基础知识-9-预处理指令宏定义啥的

本文详细介绍了C语言中的预处理指令,包括宏定义(不带参数和带参数)、条件编译、文件包含等概念,并通过示例展示了如何在实际编程中应用这些指令。
预处理指令宏定义啥的
  预处理指令:在编译前进行解析处理指令
  所有预处理指令都是以#开头
  所有的预处理指令都可以写文件任意位置,它们都和{}无关
  所有的预处理指令后面都不用写分号
 
  宏定义
     不带参数的宏定义
     带参数的宏定义
  条件编译
  文件包含




#include <stdio.h>


//定义格式 #define 宏名 值
//1、宏名的命名规范:1、全部大写多个单词中间使用_分隔 2、k开头的驼峰标示
//2、作用:在代码编译之前所有出现宏名标示的地方都会被替换成宏名后面的值
//3、宏定义的作用域:从定义那一行开始直到文件结束或取消该宏定义的地方
#define LENGTH 5


int main(int argc, const char * argv[])
{
    "LENGTH";//字符串中的宏名是不会替换的 LENGTH
    int nums[LENGTH] = {10,20};
//    int len = sizeof(nums) / sizeof(int);
#undef LENGTH // 取消宏定义
    for (int i = 0 ; i < LENGTH; i++) {
        printf("%d\n",nums[i]);
    }
    
    
    return 0;
}








//带参数的宏定义: #define 宏名(参数列表) 参数表达式
/*
 1、带参数的宏定义参数列表中不要加类型
 2、宏名后的()与表达式之间必须要有空格
 3、宏名与其后的()中间不可以有空格
 
 4、带参数的宏定义至少把传入参数带入后面的参数表达式中,替换出现带参数的宏的地方
 5、带参数的宏定义只是做了一个简简单单的替换,它不会进行任何运算
 
 6、当我们去写一个带参数的宏定义的时候,把每一个参数和结果都需要加上()
 
 7、如果我们做带参数的宏定义的题时候,就宏定义后面的表达直接拷贝到代码中做一个简单替换,然后算出结果就OK了
 */
#include <stdio.h>


#define SUM(a,b) (a + b)
#define PIF(x)   ((x) * (x))


int sum(int a,int b)
{
    return a + b;
}




int main(int argc, const char * argv[])
{
//    int result = sum(10, 20);
//    int a = 10;
//    int b = 20;
    
//    int result = SUM(1, 2) * SUM(2, 1);
//    int result = 1 + 2 * 2 + 1;
    int result = PIF(2) + PIF(2);
    result = PIF(2) / PIF(2);
    result = PIF(2 + 2);
    printf("%d\n",result);
    
    
    return 0;
}




















//
//条件编译:在程序编译的时候,如果满足条件,那么后面的语句就参与编译,如果不满足条件那么后面的语句就不参与编译
//条件编译后面的条件表达式中不能识别变量,它里面只能识别常量和宏定义


#include <stdio.h>
//if语句:在程序运行的时候,如果条件满足就执行该条件后面的语句
#define DEBUG 1


#if DEBUG == 0
//可变参数的宏定义
//##表示可以没有参数
#define Log(format,...) printf(format,## __VA_ARGS__)
#else
#define Log(format,...)
#endif




void test2();
int main(int argc, const char * argv[])
{
  
//#undef DEBUG
    
#ifdef DEBUG
    printf("DEBUG\n");
#endif
    
#ifndef DEBUG
     printf("没有定义DEBUG\n");
#endif
    
    
#if defined(DEBUG)
       printf("DEBUG\n");
#endif
    
    Log("haha \n");
    test2();
    return 0;
}


void test2()
{
    Log("hehe\n");
}




void test()
{
    int a = 5;
    //    if (a == 5) {
    //        printf("a = 5\n");
    //    }else if (a == 6){
    //        printf("a = 6\n");
    //    }else if ( a == 7){
    //        printf("a = 7\n");
    //    }else{
    //        printf("其他\n");
    //    }
    
#define a 5
    
#if a == 5
    printf("a = 5\n");
#elif a == 6
    printf("a = 6\n");
#elif a == 7
    printf("a = 7\n");
#else
    printf("其他\n");
#endif
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值