首页 > 其他分享 >C语言 18 条件编译

C语言 18 条件编译

时间:2024-09-29 15:45:18浏览次数:1  
标签:include 18 endif C语言 编译 else 666 PI define

再来看看条件编译,还可以根据条件,选择性地对某些内容进行忽略。

来认识一下#ifdef#else#endif这三种条件编译指令:

#include <stdio.h>

// ifdef用于判断是否定义了符号PI,如果没有的话则处理以下的指令
#ifdef PI
    #define M 666
// 如果定义了符号PI,那么就处理这个分支的语句
#else
    #define M 777
// 最后需要以endif指令结束整个判断
#endif

int main() {
    // 最后打印M
    printf("%d", M);
}
777

可以看到,在没有定义 PI 的情况下,执行的是#define M 777,那要是现在定义了呢?

编写一个新的头文件 test.h:

#define PI 3.1415

现在我们引入这个头文件,那么对应的预编译指令也会跟着包含进来:

#include <stdio.h>
#include "test.h"

// ifdef用于判断是否定义了符号PI,如果没有的话则处理以下的指令
#ifdef PI
    #define M 666
// 如果定义了符号PI,那么就处理这个分支的语句
#else
    #define M 777
// 最后需要以endif指令结束整个判断
#endif

int main() {
    // 最后打印M
    printf("%d", M);
}
666

可以看到此时得到的结果就是 666 了,因为现在 PI 在引入的头文件中已经定义了(当然直接在当前源文件中定义也是一样的)

那如果现在希望判断某个符号没定义呢?还有#ifndef表示判断是否未定义某个符号:

#include <stdio.h>

// ifndef 就是 if not define,跟ifdef反着的
#ifndef PI   
    #define M 666
#else
    #define M 777
#endif

int main() {
    printf("%d", M);
}
666

当然,除了判断某个符号是否存在之外,也可以像条件语句那样直接进行逻辑判断,这里需要使用到#if#elif指令:

#include <stdio.h>

#define M 666

// 若M等于666那么定义K = 999
#if M == 666   
    #define K 999
// 等同于else if语句
#elif M == 777   
    #define K 888
// else语句
#else    
    #define K 000
#endif

int main() {
    printf("%d", K);
}
999

并且这些分支还支持嵌套使用:

test.h:

#define PI 3.1415
#include <stdio.h>

#define M 666

#if M == 666
    #ifndef L
        #include "test.h"
    #endif
#elif M == 777
    #define K = 888
#else
    #define K = 000
#endif

int main() {
    printf("%f", PI);
}
3.141500

环境:

  • GCC 11.4.0
  • VSCode 1.93.1

标签:include,18,endif,C语言,编译,else,666,PI,define
From: https://www.cnblogs.com/skysailstar/p/18440133

相关文章

  • C语言课程设计:基于C语言的银行管理系统【代码+论文+PPT】
    全文内容包括:1、采用技术;2、系统功能;3、系统截图;4、配套内容。索取方式见文末微信号,欢迎关注收藏!一、采用技术语言:C开发工具:VScode二、系统功能1.客户管理:包括客户信息的增删改查、客户身份验证、客户分组等功能。2.账户管理:包括账户的开户、销户、冻结、解冻、查询、......
  • 动态内存分配——C语言
    本篇文章是对动态内存分配部分内容的学习分享,包含了四个内存函数的接受奥与使用以及常见的一些错误那咱们废话不多说,直接开始吧!1.动态内存功能存在的意义说到内存开辟也许我们并不能马上做出反应且清楚得知道指的是什么事实上,我们已经掌握了内存开辟方法了只是我们对这个......
  • [米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-18 PL AXI-GPIO实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA实验平台:米联客-MLK-H3-CZ08-7100开发板板卡获取平台:https://milianke.tmall.com/登录“米联客”FPGA社区http://www.uisrc.com视频课程、答疑解惑!目录1概述2系统框图3AXI-GPI......
  • 【C语言】qsort库函数
    使用qsort排数组升序:代码:#include<stdio.h>#include<stdlib.h>intcmp_int(constvoid*e1,constvoid*e2){ return*(int*)e1-*(int*)e2;}//使用qsort排升序voidtest1(){ intarr[]={9,8,7,6,5,4,3,2,1,0}; intsz=sizeof(arr)/sizeof(arr[0]); ......
  • C语言计算程序运行的时间长度
    C语言计算程序运行的时间长度也就是求一段代码的运行结束后耗时多长时间的问题!!!求100以内的质数的代码,加上计数和计时功能clock_tstartend取起始时间和终止时间,计算两者之差,得出代码运行所用时间!!!cpu_time_used双精度,保存时间CLOCKS_PER_SEC宏,每秒的clock数clock_t,C......
  • 【C语言】字符函数和字符串函数(1)
    文章目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现四、strcpy的使用和模拟实现五、strcat的使用和模拟实现六、strcmp的使用和模拟实现一、字符分类函数  C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的,这些......
  • 【C语言】手把手带你拿捏指针(完)(指针笔试、面试题解析)
    文章目录一、sizeof和strlen的对⽐1.sizeof2.strlen3.sizeof与strlen对比二、数组和指针笔试解析1.一维数组2.字符、字符串数组和字符指针代码1代码2代码3代码4代码5代码63.二维数组4.总结三、指针运算笔试题解析代码1代码2代码3代码4代码5代码6一、sizeof和strl......
  • 华为OD机试2024年E卷-转骰子[200分]( Java | Python3 | C++ | C语言 | JsNode | Go )实
    题目描述骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(......
  • 华为OD机试2024年E卷-矩阵匹配[200分]( Java | Python3 | C++ | C语言 | JsNode | Go )
    题目描述从一个N*M(N≤M)的矩阵中选出N个数,任意两个数字不能在同一行或同一列,求选出来的N个数中第K大的数字的最小值是多少。输入描述输入矩阵要求:1≤K≤N≤M≤150输入格式:NMKN*M矩阵输出描述N*M的矩阵中可以选出M!/N!种组合数组,每个组合......
  • 题解 ARC118E【Avoid Permutations】/ SS240928D【d】
    题目描述对于一个排列\(a\),定义其权值如下:生成一个\((n+2)\times(n+2)\)的网格图,行列标号为\(0∼n+1\),每次可以从\((i,j)\)走到\((i,j+1)\)或\((i+1,j)\),且不能走到\((i,a_i)\),权值为从\((0,0)\)走到\((n+1,n+1)\)的方案数。现在排列\(......