预处理命令总合集。最实用的从代码中解析,超容易理解,这样你还看不懂?

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 预处理命令总合集。最实用的从代码中解析,超容易理解,这样你还看不懂?

首先看下列表格预处理归纳:

指令 描述
#include 它是C语言中的头文件命令,用于指定头文件嵌入源文件中。
#define 宏定义。
#undef 宏定义的终止符,用于取消已定义的宏。
#ifdef 如果宏已定义则返回真。
#ifndf 如果宏没有定义则返回真。
#if 如果条件语句成立,则编译运行下面的代码。
#else 与#if一起使用,如果#if条件不成立,则执行下面的代码。
#elif 与#if一起使用,如果#if条件不成立,当前条件成立,则执行下面的代码。
#endif 结束一个 #if……#else 条件编译块。
#error 当遇到标准错误时,输出错误消息。
#pragma

使用标准化方法,向编译器发布特殊的命令到编译器中。 


#include:  

#include<stdio.h>
int main()
{
    printf("Hello world");
    return 0;
}

我们学C语言时的第一个程序,打印hello world,头文件就是include。



#define:

#include<stdio.h>
#define NUM 3
int main()
{
     printf("宏定义后的结果:%d",NUM);   
    return 0;
}

使用宏定义就是等价于将NUM=3。



#undef:

#include<stdio.h>
#define NUM 3
#undef NUM
#define NUM 1
int main()
{
    printf("宏定义后的结果:%d",NUM);   
    return 0;
}

运行结果:

取消前一个宏定义NUM=3,重新再宏定义NUM=1。


#ifdef、#ifndef、#endif:

第一组代码:

#include<stdio.h>
#define NUM 1
int main() 
{
    #ifndef NUM   //先判断是否定义了NUM
    #define NUM 0   //定义了则不再定义,没有定义则重新定义
      if(NUM==1) 
        printf("开始定义了NUM,执行此句");  
      if(NUM==0)
            printf("开始没有定义NUM,重新定义的NUM"); 
    #endif
  return 0;  
}

运行结果:

第二组代码:

#include<stdio.h>
int main() 
{
    #ifndef NUM   //先判断是否定义了NUM
    #define NUM 0   //定义了则不再定义,没有定义则重新定义
      if(NUM==1) 
        printf("开始定义了NUM,执行此句");  
      if(NUM==0)
            printf("开始没有定义NUM,重新定义的NUM"); 
    #endif
  return 0;  
}

运行结果:

注意:一定要在最后加上#endif,否则程序会报错哦。


#if、#else:

开关游戏:

代码1:

#include<stdio.h>
#define NUM 1
int main() 
{
#if NUM  
    printf("NUM=1,开关打开,游戏开始");  
#else  
        printf("NUM=0,开关关闭,游戏结束"); 
#endif
  return 0;  
}

运行结果:

 


代码2:

#include<stdio.h>
#define NUM 0
int main() 
{
#if NUM  
    printf("NUM=1,开关打开,游戏开始");  
#else  
        printf("NUM=0,开关关闭,游戏结束"); 
#endif
  return 0;  
}

运行结果:

 

小结:#if和#else同时使用时,判断条件是一个宏定义,只需要判断一个变量的真假。与#if和#elif判断两个变量的真假不同,要区分开。

注意:一定要在最后加上#endif,否则程序会报错。



#if与#elif:

代码1及运行结果:

#include<stdio.h>
#define NUM 1
#define SUM 1
int main() 
{
#if NUM 
    printf("NUM=1,开关打开,游戏开始");  
#elif SUM
        printf("NUM=0,开关关闭,游戏结束"); 
#endif
  return 0;  
}

运行结果:

 

代码2及运行结果:

#include<stdio.h>
#define NUM 0
#define SUM 1
int main() 
{
#if NUM 
    printf("NUM=1,开关打开,游戏开始");  
#elif SUM
        printf("NUM=0为假,SUM=1为真,开关关闭,游戏结束"); 
#endif
  return 0;  
}

运行结果:

小结:要使用#if和#elif,需要两个宏定义,#elif判断是以另一个宏定义来判断,而不是用于判断#if的宏定义。

再次注意:最后要加上endif,否则程序会报错哦。


相关文章
|
7天前
|
消息中间件 运维 监控
Linux命令lsipc:深入解析与实战应用
`lsipc` (通常指 `ipcs`) 是Linux命令,用于查看系统中的IPC资源,包括消息队列、信号量和共享内存。它显示详细信息,支持过滤,并且需要相应权限。示例用法:显示共享内存(`-m`)、查询消息队列(`-q -i ID`)、查看关联进程(`-m -p`)。注意权限、操作影响及定期监控。结合`ipcrm`等工具可进行更深入管理。
|
2天前
|
Linux 数据处理 开发者
深入解析Linux中的paste命令:数据处理与分析的得力助手
`paste`命令在Linux中是数据处理的利器,它按列拼接多个文件内容,支持自定义分隔符和从标准输入读取。例如,合并`file1.txt`和`file2.txt`,使用`paste file1.txt file2.txt`,默认以制表符分隔;若要使用逗号分隔,可运行`paste -d &#39;,&#39; file1.txt file2.txt`。当文件行数不同时,较短文件后会填充空白行。结合管道符与其他命令使用,如`cat file1.txt | paste -s`,可按行合并内容。注意文件大小可能影响性能。
|
2天前
|
机器学习/深度学习 数据采集 算法
特征工程与数据预处理全解析:基础技术和代码示例
在机器学习和数据科学的世界里,数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能,获得更准确的预测,我们将深入研究处理异常值、缺失值、编码、特征缩放和特征提取的各种技术。
4 0
|
3天前
|
存储 安全 Linux
深入解析Linux命令p11-kit:PKCS#11模块的协调器
**p11-kit详解:连接PKCS#11模块的桥梁** p11-kit是Linux下管理PKCS#11加密设备的库,它提供统一接口,简化与智能卡、HSM等的交互。用于密码学开发、系统集成及云服务,支持动态加载模块,通过API简化编程。安装时注意依赖,选择合适方式,关注版本兼容性,并通过文档和测试确保稳定。代码示例展示如何加载和卸载PKCS#11模块。
|
3天前
|
NoSQL Linux 程序员
Linux objdump命令:深入解析与实战应用
`objdump`是Linux下的反汇编工具,用于将二进制文件转换为汇编代码,便于理解程序底层。它可以反汇编目标文件、可执行文件和库,支持多种参数,如显示符号表(-t)、反汇编代码(-d)、源代码与汇编混合视图(-S)。在实践中,结合-g编译选项和特定段(-j)反汇编,能辅助调试和分析。使用时注意包含调试信息,选择适当参数,并与其他工具(如gdb)配合使用。
|
5天前
|
存储 安全 Linux
深入解析Linux命令modutil:数据处理的得力助手
`modutil`是管理PKCS#11及HSM模块的工具,用于安全数据处理。它跨平台且具丰富选项,如 `-add`、`-remove`、`-list` 和 `-initToken`。示例命令是 `modutil -add &quot;MyHSM&quot; -libfile /path/to/hsm_library.so -slot 0 -dbdir /path/to/pkcs11_db`,用于添加模块。使用时注意权限,备份数据,阅读文档并谨慎操作,可与其他工具如`pkcs11-tool`结合使用。
|
6天前
|
存储 安全 Linux
Linux命令mkfifo深度解析
`mkfifo`在Linux中创建命名管道,用于进程间通信(IPC)。管道是临时的,非持久存储,作为数据传输的通道。特点是无缓冲、支持阻塞/非阻塞模式和权限控制。命令语法:`mkfifo -m &lt;权限&gt; 文件名`。示例:创建`mypipe`,一个进程写入,另一进程读取。注意选择阻塞模式、管理权限、删除不再使用的管道,并处理可能的错误。用于数据交换和高效能应用。
|
6天前
|
监控 Linux Shell
深入解析Linux中的machinectl命令
`machinectl`是Linux systemd中的工具,用于管理轻量级系统容器的生命周期,如虚拟机和容器。它提供启动、停止、重启等操作,并基于dbus接口与systemd交互。特点是轻量级、高隔离性及灵活性。常用命令包括`list`、`status`、`start`、`stop`等。示例:`machinectl start mycontainer`启动容器,`machinectl shell mycontainer`打开容器shell。使用时注意安全、谨慎操作、备份数据,并监控资源使用。
|
5天前
|
Linux 数据处理
探索Linux中的namei命令:文件路径解析的利器
`namei`是Linux工具,解析文件路径展示每个组件详情,包括类型、权限、属主等。它递归从根目录开始,帮助理解文件系统结构,尤其处理符号链接和挂载点。使用 `-l` 选项提供长格式输出, `-m` 以挂载点显示, `-x` 显示调试信息。示例用法如解析`/home/user/documents/report.txt`路径。注意权限、路径正确性及符号链接影响。可与其他命令结合使用。
|
6天前
|
存储 NoSQL 算法
Redis(四):del/unlink 命令源码解析
Redis(四):del/unlink 命令源码解析

推荐镜像

更多