首页 > 其他分享 >C语言 ——— 学习并使用 #if …… #endif 条件编译指令

C语言 ——— 学习并使用 #if …… #endif 条件编译指令

时间:2024-09-13 23:49:58浏览次数:3  
标签:代码 endif C语言 编译 指令 printf 条件

目录

何为条件编译指令

常见的条件编译指令

学习条件编译指令

使用条件编译指令

在程序预编译阶段,条件编译指令的代码转换

多分支的条件编译指令


何为条件编译指令

在编译一个程序的时候,如果要将一条语句(一组语句)选择编译或者放弃时,就使用条件编译指令


常见的条件编译指令

#if 常量表达式
    // ……
#endif

学习条件编译指令

#if 后面是一个常量表达式,当常量表达式为真时(非0时)就执行条件编译中的语句,为假时就不执行 


使用条件编译指令

代码演示(为真时):

#include<stdio.h>
int main()
{

#if 1
	printf("hello world\n");
#endif

	return 0;
}

1 为真,所以要执行 #if 内的代码

代码验证(为真时):

代码演示(为假时):

#include<stdio.h>
int main()
{

#if 0
	printf("hello world\n");
#endif

	return 0;
}

0 为假,就不会执行 #if 内的代码

代码验证(为假时):


在程序预编译阶段,条件编译指令的代码转换

代码演示(为真时):

#if 1
	printf("hello world\n");
#endif

#if 后面的常量表达式为真时,在程序预编译阶段就会把 #if 1 和 #endif 删除,只留下要执行的代码,以上代码就会转换为以下代码:

printf("hello world\n");

代码演示(为假时):

#if 0
	printf("hello world\n");
#endif

#if 后面的常量表达式为假时,在程序预编译阶段就会把 #if 1 和 #endif 还有它们所包含的代码全部删除,也就是会将 priintf 函数从程序中删除

结论:

if 等判断语句和 #if 条件编译指令要区分开来,if语句条件为假时只是不执行if内的语句,而 #if 为假时是直接删除 #if 中的语句


多分支的条件编译指令

代码演示:

#define M 0

int main()
{

#if (M == 1)
	printf("hello\n");
#elif (M == 2)
	printf("world\n");
#else
	printf("hello world\n");
#endif

	return 0;
}

多分支结构分析:

和 if 、else if 语句类似,#if 和 #elif 中的常量表达式都为假,所以只会执行 #else 中的表达式,并且不论是但分支还是多分支,在末尾都要加上 #endif

代码验证:

且在程序预编译阶段,也是会将不执行的代码删除,只保留执行的代码

结论:

条件编译指令多用于跨平台性的代码上

标签:代码,endif,C语言,编译,指令,printf,条件
From: https://blog.csdn.net/weixin_55341642/article/details/142065502

相关文章

  • C语言 ——— 条件编译指令实际用途
    目录前言头文件被包含的方式嵌套文件包含使用条件编译指令规避头文件多次包含 还有一个编译指令,同样能做到以上功能 前言条件编译指令多用于对头文件的定义和判断以及删除头文件被包含的方式本地文件包含(也就是自己创建的头文件):#include"stdio.h"本地文件包......
  • 基础数据结构-二分变形C语言实现
    基础二分下面是一个最基础的二分搜索代码,从一个数组(数据从小到大排)中找出某元素。#include<stdio.h>//函数声明intbinarySearch(intarr[],intleft,intright,intx);intmain(){//测试数据intarr[]={2,3,4,10,40};intn=sizeof(arr)......
  • Centos7编译安装LNMP和搭建WordPress网站
    步骤1:安装依赖包 yum-yinstallgcc-c++&&yuminstall-ypcrepcre-devel&&yuminstall-yzlibzlib-devel&&yuminstall-yopensslopenssl-devel步骤2:编译安装nginx1.下载nginxwgethttp://nginx.org/download/nginx-1.26.2.tar.gz2.解压......
  • AnolisOS-7.9编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.0+zlib1.3.1
     实验镜像AnolisOS-7.9-QU1-x86_64-dvd.iso安装过程内核选择3.x #安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装yuminstall-y perl-IPC-Cmdvimmakegccwgettarlrzsznet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makei......
  • ubuntu-22.04.4编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.2+zlib1.3.1
     实验镜像ubuntu-22.04.4-live-server-amd64.iso#安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装aptinstall-y libz-devvimgccwgettarlrzsznanomakenet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makeinstall #安装......
  • C语言 12 函数
    其实函数在一开始就在使用了://这就是定义函数intmain(){...}程序的入口点就是main函数,只需要将程序代码编写到主函数中就可以运行了,不过这个函数只是由我们来定义,而不是我们来调用。当然,除了主函数之外,一直在使用的printf也是一个函数,不过这个函数是标准库中已经......
  • 一分钟在线编译定制专属固件: openwrt.ai
    https://github.com/kiddin9/Kwrt?tab=readme-ov-file  KwrtPublic Watch96Fork 3k Star 7.4k kiddin9/Kwrt   master1 Branch0 TagstAddfileAddfile CodeFoldersandfilesName  ......
  • [C语言] 14--编译器、宏定义和头文件
    1.编译器概念:编译器是一个用来帮助我们把原码.c翻译成计算机能够直接识别的二进制编码。使用不同的编译器可以翻译出来不同机器的二进制编码。gcc编译器:gcchello.c-ohellogcc-->C语言编译器hello.c-->需要编译的原码-o-->指定输出文件名hello-->可执行文件的......
  • C语言学习--重难点易错点
    define易错;只是全局替换在输入数据时候,遇到以下情况时,认为该数据结束①遇空格,或按回车,或跳格键;②指定宽度结束,如%3d;③遇非法输入类型转换inti=5;floatf=i/2;df:floatf=(float)i/2;注意上面的区别C语言只有整型,实型(浮点精度值),字符型,无逻辑型——bool......
  • C语言 11 字符串
    前面学习了数组,而对于字符类型的数组,比较特殊,它实际上可以作为一个字符串(String)表示,字符串就是一个或多个字符的序列,比如在一开始认识的"HelloWorld",像这样的多个字符形成的一连串数据,就是一个字符串,而printf函数接受的第一个参数也是字符串。在C语言中并没有直接提供存储字符......