条件编译使用分析

获取B站某用户更多的关注数和粉丝数 获取B站某用户更多的关注数和粉丝数 相关记录 一、 前言 B 站最多只能翻 5 页用户的关注数和粉丝数,如何能够看到更多呢。 方法我也是从网上翻来的,记载博客里,算是我研究过这个话题了。 二、需要的东西 关注数的 api https://api.bilibili.com/x/relation/followings?vmid=2884629&pn=1&ps=20&order=desc&jsonp=jsonp 关注者(粉丝)的 api https://api.bilibili. 阅读详情

编译预处理

专题三:编译预处理。包括以下章节:

  • 编译过程简介
  • 宏定义与宏使用分析
  • 条件编译使用分析
  • #error和#line
  • #pragma预处理分析
  • #和##运算符使用解析

基本概念

  • 条件编译的行为类似于c语言中的if…else…语句
  • 条件编译是预编译指示命令,用于控制编译哪一段代码
  • 条件编译对预编译器起作用;if…else…在运行时起作用

  • #if()…#else…#endif 判断条件表达式

  • #ifdef…#else…#endif 判断宏
  • #ifndef…#endif 判断是否定义过宏:如果定义过,跳出;否则,往下进行

3-1.c

#include<stdio.h>

//如果没有定义宏常量C,可以通过命令:gcc -DC=1 -E 3-1.c -o 3-1.i 来定义宏常量C,方便调试。
#define C 1

int main()
{
#if( C == 1)
    printf("THIS IS FIRST ...\n");
#else
    printf("THIIS IS SECOND ...\n");
#endif

    if (c == 1) {
        printf("THIS IS FIRST ...\n");
    }else {
        printf("THIIS IS SECOND ...\n");
    }

    return 0;
}

3-1.i

# 1 "3-1.c"
# 1 "<built-in>"
# 1 "<命令行>"
# 1 "3-1.c"

/*......此处省略n行......*/

# 940 "/usr/include/stdio.h" 3 4

# 2 "3-1.c" 2



int main()
{

    printf("THIS IS FIRST ...\n");




    if (1 == 1) {
        printf("THIS IS FIRST ...\n");
    }else {
        printf("THIIS IS SECOND ...\n");
    }

    return 0;
}

#include

  • #include是将已经存在的文件内容拷贝到当前文件中
  • 间接包含同一个文件也会拷贝相同的内容到当前文件中,会出现编译错误

3-2.c

#include "3-2.h"
#include "global.h"

int main()
{
    return 0;
}

3-2.h

#include "global.h"

global.c

int global = 2;

3-2.i

# 1 "3-2.c"
# 1 "<built-in>"
# 1 "<命令行>"
# 1 "3-2.c"
# 1 "3-2.h" 1
# 1 "global.h" 1
int global = 2; //重定义了global
# 2 "3-2.h" 2
# 2 "3-2.c" 2
# 1 "global.h" 1
int global = 2;
# 3 "3-2.c" 2

int main()
{
 return 0;
}

结果:
这里写图片描述

  • 我们可以使用条件预编译指令(#ifndef:判断是否定义过宏; #define:定义宏定义; #endif:结束)解决嵌套包含问题

3-2.c

#include "3-2.h"
#include "3-2.h"
#include "global.h"
#include "global.h"

int main()
{
    return 0;
}

3-2.h

#ifndef _3_2_H_
#define _3_2_H_

#include "global.h"

#endif

global.c

#ifndef _GLOBAL_H_
#define _GLOBAL_H_

int global = 2;

#endif

3-2.i

# 1 "3-2.c"
# 1 "<built-in>"
# 1 "<命令行>"
# 1 "3-2.c"
# 1 "3-2.h" 1



# 1 "global.h" 1



int global = 2;
# 5 "3-2.h" 2
# 2 "3-2.c" 2




int main()
{
 return 0;
}

结果编译正确:
这里写图片描述

条件编译的意义

  • 条件编译使得我们可以按不同的条件编译不同的代码段, 因而可以产生不同的目标代码
  • #if…#else…#endif被预编译器处理;而if…else语句被 编译器处理,必然被编译进目标代码
  • 实际工程中条件编译主要用于一下两种情况:
    • 不同的产品线共用一份代码
    • 区分编译产品的调试版和发布版

实例分析3-2:条件编译的使用

3-3.c

#include <stdio.h>

#ifdef DEBUG
#define LOG(s) printf("[%s:%d] %s\n", __FILE__, __LINE__, s)
#else
#define LOG(s) NULL
#endif

#ifdef HIGH
void f()
{
    printf("This is the high level product!\n");
}
#else
void f()
{
}
#endif

int main()
{
    LOG("Enter main() ...");

    f();

    printf("1. Query Information.\n");
    printf("2. Record Information.\n");
    printf("3. Delete Information.\n");

#ifdef HIGH
    printf("4. High Level Query.\n");
    printf("5. Mannul Service.\n");
    printf("6. Exit.\n");
#else
    printf("4. Exit.\n");
#endif

    LOG("Exit main() ...");

    return 0;
}

结果:
这里写图片描述

小结

  • 通过编译器命令行能够定义预处理器使用的宏
  • 条件编译可以避免重复包含头同一个头文件
  • 条件编译是在工程开发中可以区别不同产品线的代码
  • 条件编译可以定义产品的发布版和调试版
C#【必备技能篇】Winform实现多语言切换(.resx文件的应用) 在实际的项目开发中,软件需要实现多语言切换。本文通过一个实际的例子,可以让你学习到这个技能。 阅读详情

相关推荐

esp32移植canopen协议栈(二)

本文续接上一篇文章,之前我们已经搭建好了esp32的开发环境,以及初始工程。接下来我们开始实现can驱动相关,以及使用c++封装can接口。本文使用esp32实现c++实现can驱动层的封装。下一步移植canopen!!!嘻嘻。

qq_50267418的博客 1908

c语言学习笔记(12)条件编译使用分析

摘要:总结了条件编译和if else的区别,#include在包含头文件时候的注意点,使用条件编译避免重复包含头文件,最后给出一个实例加深理解。 一、什么是条件编译      我们在移植u-boot和linux内核的时候,经常会看到#ifdef…#endif或者#ifndef…#endif这样的代码,这个就是条件编译,总的来说:     1.条件编译行为类似if…else,都是条件

Deep_l_zh的博客 1191

基于PyTorch的BP神经网络PID控制器动态调参实战

本文详细介绍了基于PyTorch的BP神经网络PID控制器动态调参实战,结合BP神经网络的自适应能力和PID控制算法的经典优势,实现工业控制中的高效参数调整。通过PyTorch实现BP-PID融合架构,包括网络设计、损失函数优化及动态调参技巧,显著提升控制性能,适用于温度控制、电机控制等场景。

weixin_29094775的博客 522

【C语言复习(九)】条件编译的使用与分析

1、基本概念: 条件编译的行为类似于if...else语句,只是在条件编译中,满足条件的才会被保留下来以备编译。 条件编译是预编译指示命令,用于控制是否编译某段代码。   示例: #include    #define COMMAND  1 int main() {     #if(COMMAND == 1)         printf("COMMAND == 1");

CMbug的专栏 761

强化学习-动态规划

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。

qq_45481856的博客 2115

ABAP ALV编辑后触发事件

1.FUNCTION ALV在it_events的参数中,写入对应的事件。2.OO ALV和FUNCTION ALV都可以,注册当前ALV的事件,对应的事件需要创建对象去实现。下面代码中,实现的是第一种,在it_events中写入事件。下面的代码是通过创建对象去实现ALV事件。

a86632678的博客 3852

完美解析C/C++条件预处理编译:#define、#if 、#ifdef、#elif、#endif

一、预处理的条件编译 预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。 二、常用指令 # 空指令,无任何效果 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #elif预处理指令

源代码杀手的博客 6098

Deepseek 10分钟化身理性荐股神器:触碰程序员不敢想的天花板

在这个消息疯狂、波动频繁的市场,“理性”两字显得弥足珍贵。通过Deepseek+AkShare+Aktools+Dify四位一体的方案,能帮我们降低信息搜集成本,并在短期投资领域搭建出一套“可解释、低门槛、易定制”的量化荐股流程。不要再盲目听小道消息或依赖情绪驱动,不妨给自己一个机会,让数据说话。而要注意的是,“理性荐股”并非万能,它只是工具,最终的收益还得依赖投资者自身对风险和机遇的权衡。祝大家都能在这股市里收获理性的底气,寻得更精准的入场时机。

qqxdh的博客 3754

C语言基础入门48篇_番外篇_条件编译(预处理中的条件编译是一种可以决定编译哪些代码的机制、#if...#endif、#if和defined,非defined相结合/#ifdef和#ifnde)

在C语言中有一种机制可以决定编译哪些代码,这个机制就是预处理中的条件编译。本篇主要介绍常用的判断语句。 总结如下: 1.判断语句条件编译#if…#endif的使用 2.是否被定义: #if预处理和defined,!defined预处理相结合的方式 使用简写的#ifdef和#ifndef的形式 3.多重判断#if…#elif…#else…#endif 4. .h文件中条件编译语句的含义 使用条件编译,你可以选择代码的一部分是否被正常编译,C中条件编译的主要形式有三种。 1.判断语句条件编译#if...#e

分享学习成长历程,Winter is coming! 1384

STM32F103VCT6+W5500 TCP 服务端通信

STM32F103VCT6 W5500的TCP连接通讯的程序

坚韧与专注 7820

【FISCO-BCOS】 八、ubuntu配置Java环境

ubuntu配置Java环境需根据自己的java版本号进行细节修改,本文以jdk11.0.18版本为例。ps:通过此法还可以查看java安装路径,但必须是环境配置成功的情况下才能使用。二、添加Java环境路径。四、检查java环境设置。

naihe_fish的博客 4311

【C/C++ 基础】条件编译相关的预编译指令

在C/C++编程中,预处理器(Preprocessor)是一个非常有用的工具,它在编译过程之前对代码进行预处理。预处理器可以用于包含头文件、定义宏、条件编译等。本文将详细介绍C/C++中常用的预处理器指令,并通过实例来解释它们的用法和底层工作原理

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 415

基于Simulink的电动汽车电池管理系统热管理优化仿真

电动汽车电池管理系统(Battery Management System, BMS)中的热管理是确保电池性能、安全性和寿命的关键环节。温度过高或过低都会显著影响电池的工作效率和寿命,因此需要对电池组进行精确的热管理。基于MATLAB/Simulink的仿真平台可以用于建模和优化电池热管理系统,包括热分布预测、冷却策略设计以及热平衡控制等。本项目旨在构建一个完整的电动汽车电池热管理优化仿真模型,并通过仿真验证系统的性能。

xiaoheshang_123的博客 462

条件编译分析及使用

1 基本概念 条件编译的行为类似于C语言中的if…else… 条件编译是预编译指示命令,用于控制是否编译某段代码。 代码分析 // #include <stdio.h> #define C 1 int main() { const char* s; #if( C == 1 ) s = "This is first printf...\n"; #else s = "This is second printf...\n"; #e

weixin_48321071的博客 664

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

7、条件编译使用分析

文章目录一、条件编译的作用1、如何工作2、如何在命令行中进行代码调试3、如何避免头文件的重复定义(1)概念(2)如何解决4、实际工程中条件编译的其他作用二、总结 一、条件编译的作用 1、如何工作 它是预编译指示指令,用于控制是否编译某段代码,下面我们通过一个例程来看看它的内部是如何工作的。 //#include<stdio.h> #define C 1 int main() { const char* s =NULL; #if (C==1) s="first\n"; #else

wuzhishiwo的博客 490

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C语言-条件编译使用分析

1、基本概念   条件编译的行为类似于C语言中的if…else…   条件编译是预编译指示命令,用于控制是否编译某段代码 2、实例分析 条件编译初探22-1.c 1 #include<stdio.h> 2 3 #defineC1 4 5 intmain() 6 { 7 const...

dashen2259的博客 166

c语言 条件编译的使用分析,C语言-条件编译使用分析

1、基本概念条件编译的行为类似于C语言中的if…else…条件编译是预编译指示命令,用于控制是否编译某段代码2、实例分析条件编译初探22-1.c1 #include2 3 #defineC14 5 intmain()6 {7 constchar*s;8 9 #if(C==1)10 s="Thisisfirstprintf...\n...

weixin_29802461的博客 143

条件编译 使用分析

条件编译

ZhY_Rening的博客 3181

22-条件编译使用分析

注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。 测试环境:Ubuntu 10.10 GCC版本:4.4.5 一、基本概念 1)条件编译的行为类似于C语言中的if...else... 2)条件编译是预编译指示命令,用于控制是否编译某段代码 #define C 1 int main() { #if(1 == C) printf("This is firs...

第一大剑豪——索隆 218

c语言 条件编译的使用分析,【C】 22_条件编译使用分析

基本概念条件编译的行为类似于 C 语言中的 if...else...条件编译是预处理指示命令,用于控制是否编译某段代码示例分析: 条件编译初探test.c#include #define C 1int main(){const char* s;#if( C == 1 )s = "This is first printf...\n";#elses = "This is second printf.....

weixin_33206743的博客 187

c语言 条件编译的使用分析,【C语言学习】17__条件编译使用分析

1:基本概念条件编译的行为类似于C语言中的if…else条件编译是预编译指示命令,用于控制是否编译某段代码#include #define C 1int main(){#if( C == 1 )printf("This is first printf...\n");#elseprintf("This is second printf...\n");#endifgetchar();return 0;...

weixin_33391709的博客 199

22_条件编译使用分析 & 23_#error、#warning以及#line的使用分析

22_条件编译使用分析 1、条件编译的本质 条件编译类似于if…else…,但是其发生在预处理阶段 宏定义可以通过命令行进行: ####2、条件编译的使用举例 示例1:防止头文件重复包含 #ifndef _HEADER_FILE_H_ #define _HEADER_FILE_H_ //source code #endif // test.h #ifndef _TEST_H_ #define _TEST_H_ #include "global.h" const char* NAME = "tes

chenqiang_ace的博客 489
上一篇: 宏定义与宏使用分析
下一篇: #error和#line
wuyadecs
博客等级 码龄15年 16粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值