条件编译 #if #endif #if #elif #else #endif #ifdef #if define 的使用方法 引头文件#include<> 和#include““的区别

简介: 条件编译 #if #endif #if #elif #else #endif #ifdef #if define 的使用方法 引头文件#include<> 和#include““的区别
//条件编译:满足条件就编译,不满足就不编译----不等于注释
int main()
{
    //1.  #if  常量表达式(可以是1,0,1+2,1-2等)+       #endif
#if 1     //#if  1为真,参与编译                   #if 0为假,不参与编译---等价于注释
    printf("呵呵\n");
#endif    
    return 0;
}
       //2.多个分支的条件编译 #if常量表达式  +  #elif常量表达式  + #else常量表达式...+ endif
       //一个一个进行判断,上一个为真,就不用考虑下一个了
int main()
{
#if 1==2
    printf("呵呵\n");
#elif 2==3
    printf("哈哈\n");
#else 3==4
    printf("嘿嘿\n");
#endif 4==4
    printf("灰灰\n");
    return 0;
}
            //判断宏是否被定义
//1.#ifdef==if define宏        +    #endef宏
int main()
{
#ifdef TEST//如果TEST定义,就参与编译,否则就省略,(像注释一样)
    printf("呵呵\n");
#endif
    printf("哈哈\n");
    return 0;
}
//2.#ifndef==if!define       +    #endef宏
int main()
{
#ifndef TEST//如果TEST没有被定义,就参与编译,否则就省略,(像注释一样)
    printf("呵呵\n");
#endif
    printf("哈哈\n");
    return 0;
}
                 //嵌套使用时
#if defined(OS_UNIX)
  #ifdef OPTION1
    unix_version_option1();
  #endif
  #ifdef OPTION2
    unix_version_option2();
  #endif
#elif defined(OS_MSDOS)
  #ifdef OPTION2
    msdos_version_option2();
  #endif
#endif
    //引头文件方式#include<>  (库文件的包含)        和#include""  (本地文件的包含,自定义)
    //本质区别是查找策略的区别
    //""查找:1.去自己代码所在的目录下查找,2.如果第一步找不到,则在库函数的头文件目录下查找
    //<>查找:自己去库函数头文件所在的目录下查找
    //可以用""替代<>的文件,但是反过来不行,,,,,在库里面能用<>就用<>,,,,,自己定义的用""
    //防止一个文件被重复多次定义
    //1.在文件第一行加上#pragma once
    //2.     #ifndef __ADD_H__  (ADD_H_是文件名,最好大写)
    //       #define __ADD_H__
    //       .....
    //       .....
    //       #endif
相关文章
|
C语言
[字符串和内存函数]strcmp和strncmp以及memcmp的区别
[字符串和内存函数]strcmp和strncmp以及memcmp的区别
428 0
|
Linux 网络安全
详解Linux常见命令及终端使用技巧
本文主要详解Linux常见命令及终端使用技巧
2793 10
|
虚拟化
minos 2.5 中断虚拟化——vGIC
这一节开始讲述真正的中断虚拟化,首先来看硬件方面的虚拟化。前文 minos 2.3 中断虚拟化——GICv2 管理 主要讲述 GICv2 的 Distributor 和 CPU Interface,在 Hypervisor 存在的情况下,它们都是为 Hypervisor 服务的。现在有了 vm,vm 里面的内核也需要操作 GIC,怎么办?我们模拟一个 GIC 设备给 vm 使用。
277 5
minos 2.5 中断虚拟化——vGIC
|
Ubuntu Python
ubuntu升级Python版本
现在,你已成功升级了Python版本并可以使用新版本进行开发和运行程序。
908 1
|
Linux Windows 内存技术
PCIe初始化枚举和资源分配流程分析
本文主要是对PCIe的初始化枚举、资源分配流程进行分析,代码对应的是alikernel-4.19,平台是arm64 ## 1. PCIe architecture ### 1.1 pcie的拓扑结构 在分析PCIe初始化枚举流程之前,先描述下pcie的拓扑结构。 如下图所示: ![11.png](https://ata2-img.oss-cn-zhangjiakou.aliyuncs
8404 1
PCIe初始化枚举和资源分配流程分析
|
搜索推荐 5G 新制造
华为星闪联盟:引领无线通信技术创新的先锋
星闪(NearLink),是由华为倡导并发起的新一代无线短距通信技术,它从零到一全新设计,是为了满足万物互联时代个性化、多样化的极致、创新体验需求而诞生的。这项技术汇聚了中国300多家头部企业和机构的集体智慧,华为更是其中的主要贡献方。
465 2
|
消息中间件 Linux 芯片
soc的核间通信机制-->mailbox
soc的核间通信机制-->mailbox
963 0
|
存储 Linux 芯片
OpenSBI三种固件的区别
OpenSBI三种固件的区别
|
机器学习/深度学习 算法 API
性能世界第二的半定规划SDP是什么?怎么用?此文全面解答
半定规划作为作为重要的优化建模工具被广泛应用于机器学习、信号处理、计算机视觉、以及量子计算等领域。MindOpt新版本V0.23.0中新增了半定规划SDP求解器,测评成绩世界第二。
性能世界第二的半定规划SDP是什么?怎么用?此文全面解答
anaconda创建一个新的虚拟环境
anaconda创建一个新的虚拟环境
16207 2
anaconda创建一个新的虚拟环境