编译预处理:#if

这篇具有很好参考价值的文章主要介绍了编译预处理:#if。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用法

#if <expression>

#elif

#end

<expression> 是整数常量比较的表达式,例如:

  • defined表达式,例如 defined AAA, 或者 defined(AAA), 如果AAA是一个宏定义,return true,否则,return false;
  • 单个整数,例如:1/10/100/0, 非零为true,零为false;
  • 整数比较,例如:1 == 1为true, 0 == 0为ture, 1 > 2为false;
  • 单个的字符,例如:‘A’ == ‘A’ 为true, ‘A’ == 'C’为false, 我推测最终还是转化为ASIC码,然后进行整数的比较;
  • 如果出现两个未定义的变量,例如 AAA == BBB, 永远为true,我推测测试AAA和BBB都会被认为是零,即 0 == 0,所以永远为true;关于这一点,可以参考CppReference

After all macro expansion and evaluation of defined, __has_include (since C++17), and __has_cpp_attribute (since C++20) expressions, any identifier which is not a boolean literal is replaced with the number ​0​ (this includes identifiers that are lexically keywords, but not alternative tokens like and).
Then the expression is evaluated as an integral constant expression.

切记,

  • 不允许字符串的比较,例如 “AAA” == “AAA”, “AAA” == “BBB”, 编译会报错;当然,这本来也不应该使用==,对于字符串的比较应该使用strcmp,但是又由于是编译预处理,strcmp作为一个函数是没办法使用的。。。

参考:
https://stackoverflow.com/questions/2335888/how-to-compare-strings-in-c-conditional-preprocessor-directives文章来源地址https://www.toymoban.com/news/detail-413335.html

到了这里,关于编译预处理:#if的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 预处理/预编译详解(C/C++)

            在上一篇的bolg中的编译与链接中提到过 预处理 ,但只是较为简单的讲解,本篇将会对预处理进行详细的讲解。         其中在预处理中很重要的一个一个知识点是#define定义常量与宏,还区分了宏与函数的区别,以及#和##符号,还涉及条件编译头文件的包含等等。

    2024年01月17日
    浏览(38)
  • c语言中编译过程与预处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在c语言的一个项目中会有很多.c文件,这些.c文件就是源文件,组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code),即每个源文件都转换为对应的目标文件,即.obj文件。 然后这些

    2024年02月11日
    浏览(28)
  • Linux的编译器——gcc/g++(预处理、编译、汇编、链接)

    前言: 本文主要认识与学习 Linux 环境下常用的编译器—— gcc (编译 C 代码)/ g++ (编译 C++ 代码)的常用指令等、程序实现的两大环境、动态库与静态库的理解等。 任何一个 C 程序的实现都要经过 翻译环境 与 执行环境 。 在翻译环境中又分为4个部分, 预编译、编译、汇

    2024年02月13日
    浏览(30)
  • 初始C语言最后一章《编译、链接与预处理详解》

    感谢老铁们的陪伴和支持,初始C语言专栏在本章内容也是要结束了,这创作一路下来也是很不容易,如果大家对 Java 后端开发感兴趣,欢迎各位老铁来我的Java专栏!当然了,我也会更新几章C语言实现简单的数据结构!不过由于我是Java 技术栈的,所以如果以后有机会学习C

    2024年04月16日
    浏览(25)
  • C语言中程序的编译(预处理操作)+链接详解(详细介绍程序预编译过程)

    今天我们来学习C语言中程序的编译和链接是如何进行的。 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。 本文主要是介绍预编译阶段的相关知识。 1.组成一个程

    2023年04月09日
    浏览(28)
  • 利用Python进行数据清洗与预处理:Pandas的高级用法【第147篇—Pandas的高级用法】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和机器学习领域,数据清洗和预处理是至关重要的步骤。Pandas库作为Python中最受欢迎的数据处理工具之一,提供了强大的功能来处

    2024年04月09日
    浏览(88)
  • 程序环境和预处理(含C语言程序的编译+链接)--2

    文章前言: 上章我们把      程序的翻译环境     程序的执行环境   C语言程序的编译+链接     预定义符号介绍    预处理指令   #define    宏和函数的对比     预处理操作符    #和##的介绍   的相关知识进行了梳理讲解,接下来被把剩余知识    命令定义     预处

    2024年02月14日
    浏览(42)
  • 【C语言】从预处理到机器代码的C语言编译过程解析

    当我们编写一个C语言程序时,我们需要经历一个编译的过程,将源代码转换为可执行的机器代码。这个过程涉及到多个阶段和环节,每个阶段都有其特定的任务和功能。在本篇博客中,我们将详细介绍C语言的编译过程。 目录 一、预处理阶段(Preprocessing) 二、词法分析阶段

    2024年02月13日
    浏览(25)
  • 015+limou+C语言深入知识——(7)编译环境和运行环境以及预处理指令

    在这个环境中,源代码被转化为可执行的机器指令(二进制指令) 单文件简易版本 多文件简易版本 编译链接详细版本 VS2022集成IDE(windows下)的编译器叫cl.exe,链接器叫link.exe gcc编译器(windows下)的几个有关编译环境的命令 (1)符号表会把全局变量和具有外部链接的函数

    2023年04月11日
    浏览(29)
  • 【Python】if和elif的用法

    1. if 语句 if 语句用于执行特定的代码块,当给定条件为真时执行。其基本语法结构如下: 2. if-elif-else 语句 elif 是 else if 的缩写,用于在多个条件之间进行判断。如果 if 语句中的条件不满足,Python 会检查 elif 语句,如果条件为真则执行对应的代码块。最后, else 是一个可选

    2024年01月21日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包