C语言-使用宏进行定义和条件编译

#define PI 3.14 来定义输入模型的参数

/*
使用宏定义进行定义
*/
#include <stdio.h>
#define PI 3.14f 
#define CICLE(r)  r * PI * 2  //定义周长 
int main() {
    int radius = 0; 
    printf("请输入圆的半径:"); 
    scanf("%d", &radius); 
    printf("%g\n", CICLE(radius));      
}

gcc -DSIZE = 5 10macro.c 使用外部命令来定义

/*
使用命令进行编译
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
int main() {
    int arr[SIZE] = {0}; 
    int num = 0; 
    for (int tmp = 0;tmp < SIZE;tmp++) {
        arr[tmp] = rand() % 36 + 1; 
    } 
    for (int tmp = 0;tmp < SIZE;tmp++) {
        printf("%d ", arr[tmp]); 
    }
    printf("\n"); 
}

使用三目运算来构造函数的返回值

/*
宏演示
*/
#include <stdio.h>
#define NEG(n)  0 - n 
#define ABS(n) n > 0 ? n : 0 - n 
void Abs(int *p_val) {
    if (*p_val < 0) {
        *p_val = NEG(*p_val); 
    } 
}
int main() {
    int var = 0, var1 = 0; 
    printf("请输入一个数字:"); 
    scanf("%d", &var); 
    Abs(&var); 
    printf("输入数字的绝对值是%d\n", var); 
    printf("请输入一个数字:"); 
    scanf("%d", &var1); 
    printf("输入数字的绝对值是%d\n", ABS(var1));
}

定义两个数据进行相加操作,添加括号用来保证结果

/*
计算两个数进行相加操作
*/
#include <stdio.h>
#define REDUCE(A, B) ((A) - (B))
int main() {
    int val = 0; 
    printf("%d\n", 20 - REDUCE(10, 5)); 
    printf("%d\n", REDUCE(20, 10 - 5));     
    return 0; 
}

使用三目运算定义宏函数,使用宏函数查找数组中最小的数字

/*
使用宏找出数据中最小的数 
*/
#include <stdio.h>
#define MIN(a, b) ((a) > (b) ? (b) : (a)) 
int main() {
    int val = 0, val1 = 0, val2 = 0, tmp = 0; 
    printf("请输入三个数字:"); 
    scanf("%d%d%d", &val, &val1, &val2); 
    tmp = MIN(MIN(val, val1), val2);
    printf("最小的数字是%d\n", tmp); 
} 

 使用#n 和 p_##n 对变量的命名,以及将数据转换成字符串类型

/*
宏操作符演示
*/
#include <stdio.h>
#define STR(n) #n //将输入的数字转换为字符串
#define PTR(n) p_##n //将输入的数字进行重新的命名 
int main() {
    int val = 0; 
    int *PTR(val) = &val; 
    printf("%d\n", *PTR(val)); //输出函数的具体数字
    printf("%s\n", STR(2 + 3)); //将内容转换为字符串
}

使用ifdef 和 ifndef 进行条件编译

/*
条件编译演示
*/ 
#include <stdio.h>
int main() { 
//#ifdef      YI   //如果编译的时候定义了YI这个宏,就编译前一组语句忽略后一组语句,否则编译后一组忽略前一组  
// gcc -DYI 03compile.c 
#ifndef   ER //如果编译的时候没有编译ER,就编译前一组语句忽略后一组语句,否则编译后一组语句忽略前一组语句 
    printf("1\n"); 
#else 
    printf("2\n"); 
#endif     
    return 0; 
}

进行条件编译的作业题

/*
点菜程序
*/
#include <stdio.h>
int main() { 
    int val = 0; 
#ifndef ZHAOBENSHAN 
   printf("请输入要点的菜:");
   scanf("%d", &val);   
   if (val == 1){ 
      printf("小龙虾正在准备\n"); 
   } 
   else{
      printf("没有小鸡炖蘑菇\n"); 
   }  
#else  
   printf("请输入要点的菜:");
   scanf("%d", &val);   
   if (val == 1){ 
      printf("没有小龙虾\n"); 
   } 
   else{
      printf("小鸡炖蘑菇真没有\n"); 
   }
#endif 
   return 0; 
} 

使用 #if  #elif #else #endif 进行三种情况的条件编译

/*
条件编译演示
*/ 
#include <stdio.h>
int main() { 
#if   defined(GONGCHANG) //编译时定义过GONGCHANG宏
    printf("80%%\n"); //显示工厂店的折扣比例
#elif !defined(GONGCHANG) && !defined(JINGPIN)
    //编译时既没有定义过GONGCHANG宏也没定义过JINGPING宏 
    printf("100%%\n"); //显示普通店的折扣比例 
#else 
    printf("120%%\n"); //显示精品店的折扣比例 
#endif 
    
    return 0; 
} 

 

posted @ 2020-03-05 17:11  c语言我的最爱  阅读(1149)  评论(0编辑  收藏  举报