预处理指令的疑惑

C语言#define预处理详解 目录 一、使用#define定义标识符常量 语法1: 常量与常变量的不同: 注意: 语法2: 二、#define来定义带有参数的宏 三、C语言给我们定义好的一些标识符常量 一、使用#define定义标识符常量 语法1: #define MAX 100 注意使用#define末尾不需要带; MAX是一个常量,是使用#define定义的一个标识符常量!!! 我为什么要在这里强调这是一个常量呢?因为它和普通常量一样不可被修改 大家可能会疑惑使用const修饰的变量不也是... 阅读详情

用到预处理指令了就查阅msdn学习并参照例子练习了下。暂时先记录下遇到的问题。

1。预处理指令不预先定义

debug模式下#debug 则一直为true即使注释掉也能使用其他预处理指令如果不预先声明,直接判断结果不出错但是判断结果为false

2.在release下 Console.WriteLine函数无法使用

#define DEBUG
#define VC_V7
using System;
public class MyClass
{
    static void Main()
    {
#if (DEBUG && !VC_V7)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
        Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
        Console.WriteLine("DEBUG and VC_V7 are defined");
#else
        Console.WriteLine("DEBUG and VC_V7 are not defined");//在release模式下 这里会编译错误
#endif
    }
}

 

但是同样类型用#if #else #endif就可以通过?如下

#if (xx)
            Console.WriteLine("xx defined");
#else
            Console.WriteLine("xx not defined");
#endif

但是此段代码无论在debug还是release下都能正常执行 同样在未预先定义预处理指令

有关编译预处理顺序的讨论     众所周知,程序编译过程一般分为预处理,编译,汇编,链接四个过程。而编译预处理一般主要做3件事:宏扩展,去掉注释,和合并头文件。最近遇到了关于宏扩展和合并头文件执行顺序的讨论,根据牛人的说法,应该是先合并头文件,然后开始宏扩展。    一听到这个结论的时候,我心里就产生了疑问,但是因为当时不确信,就没有当场质疑“权威”。我心里的疑问是想象中的这样一段代码://test1.cpp#define 阅读详情

相关推荐

YOLOv8实战:如何用Focaler-IoU提升小目标检测精度(附代码)

本文详细介绍了如何通过Focaler-IoU提升YOLOv8在小目标检测中的精度,包括核心机制解析、代码实现及调优策略。Focaler-IoU通过动态聚焦机制有效解决传统IoU对小目标检测的不足,显著提升模型性能。附有完整的代码示例和实战指南,适合计算机视觉开发者参考。

weixin_29044157的博客 362

错误积累3:unrecognized preprocessing directive

unrecognized preprocessing directive: 未识别的预处理指令 解决办法:查看预编译指令是否有拼写错误

懂软硬件的老中医 7687

量化投资进阶:Fama-French三因子模型实战解析与Python实现

本文深入解析了Fama-French三因子模型,并提供了完整的Python实战指南。文章阐述了该模型如何通过引入市值因子(SMB)和价值因子(HML),对传统CAPM模型进行重要扩展,以更精准地解释股票收益来源。详细演示了使用Python获取数据、执行回归分析并解读结果(包括关键的阿尔法α)的全过程,并探讨了该模型在量化策略构建、风格诊断和业绩归因中的核心应用。

yog99的博客 1126

C++报错无效的预处理命令include_C语言的预处理指令介绍

C 的预处理器不是编译器的组成部分,它是编译过程中一个单独的步骤,它们会指示编译器在实际编译之前完成所需的预处理。GCC编译C语言程序的全过程C 语言的预处理指令是以 # 号开头的代码行,# 后是指令关键字,整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是一些常见预处理命令的使用介绍。#include包含一个源代码文件#include 即从系统库中获取 stdi...

weixin_39715926的博客 3047

Camera Sensor接口协议全解析(六)聚焦onsemi HiSPi接口的技术突破与应用实践

摘要: Onsemi HiSPi是一种高速并行接口协议,专为高分辨率图像传感器设计,具备1600 Mbps传输速率、低功耗和高兼容性特点。通过对比DVP、MIPI CSI-2等主流协议,HiSPi在工业/医疗领域表现突出,支持动态功耗控制、多ROI和CRC校验。其创新架构包含多PHY设计,提供分组SP、流SP等多种工作模式,满足灵活传输需求。实际应用中,HiSPi在PCB缺陷检测(5μm精度)和液晶面板检测(0.3% Mura检出率)等场景展现卓越性能,成为高速成像领域的关键技术。

GateWorld的博客 1435

字节跳动高频111道核心前端面试题解析,web开发增强

但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。自定义指令(v-check、v-focus)的方法有哪些?v-model是什么?

2401_84094620的博客 1200

unrecognized preprocessing directive

unrecognized preprocessing directive 意思是无法识别的预处理指令。写错了,将其纠正问题解决。通过报错内容可以知道是。

weixin_62179295的博客 1539

关于 MCU 芯片外围电路的快速入门介绍

MCU 外围电路的核心是“围绕 MCU 需求,搭建稳定、匹配的外部支撑”,入门阶段无需掌握复杂设计,只需先吃透供电、复位、时钟、IO 驱动、基础通信这五大模块,再逐步扩展存储、显示、传感器等进阶功能。实践中多调试、多参考成熟方案,是快速掌握外围电路设计的关键。码字不易,若觉得本文对你有用,欢迎,相关技术热点时时看🔥🔥🔥​​​…

JiaWen的博客 1643

Error[Pe011]: unrecognized preprocessing directive

最近编程出现了一个这样的报错,unrecognized preprocessing directive (无法识别的预处理指令) 预处理功能常用的主要以下3种: 1.宏定义 2.文件包含 3.条件编译 如果出现这样的报错,查看预编译指令是否发生错误,例如关键词有没有写错(include,define ifndef endif等),是不是加了不该加的符号(如: ;)...

AAlonso的博客 1万+

ConvLSTM时空预测实战代码详解

ConvLSTM代码复现

JaysonWong的博客 1万+

S7-1200PLC 2轴直线插补详细算法(完整源代码)

速度轴V90PN总线伺服梯形加减速速度控制(标准报文1应用)_v90伺服加减速时间怎么调整-优快云博客文章浏览阅读288次。

RXXW_Dor的博客 4256

预处理指令讲解

容易会 不懂留言

zjx06136的博客 611

【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】

正常情况下,一个NIC的实现,可以包含一百多个master和几十个slave,每个master和每个slave都会有一些寄存器,这些寄存器可以被 programming,实际实践中就会对 AMIB 或者 ASIB 或者 IB,当它需要具有 programming的时候,给它指定一个node number。为什么指定Node Number呢?首先,从CPU的角度,它需要有一个1M对齐的地址空间,在这1M地址空间上,对每个ASIB或者AMIB这样的接口给它一个node number以后,

CodingCos的博客 5241

C语言经典面试题100道(附完整答案)

关注、星标公众号,直达精彩内容来源:https://blog.youkuaiyun.com/qq_42613510/article/details/81225935做了校对与详解,方便大家参考。最后编程答案自己做的,还没写完,可能不全,需要自己百度答案。有什么问题请评论,会及时修改,避免误导大家。1.请填写bool , float, 指针变量 与“零值”比较的if语句。 提...

李肖遥的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C语言实用log宏定义

C语言已经做了蛮久了,一直不知道平时的打印宏是怎么定义的。今天参考了他人写的一篇关于:#、##、VA_ARGC、##VA_ARGC 说明的文章,自己定义了4个level的log打印宏,感觉还挺好玩,终于不用再对这个迷惘了!感谢这位大神,顺便附上自己的代码。 参考文章: https://blog.youkuaiyun.com/q2519008/article/details/80934815 ...

qq_34199740的博客 768

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c语言.h文件实例,C 语言项目中.h文件和.c文件的关系

那是一个被 遗忘的年代,在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代。那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在 很多.c(.cpp)文件中的声明语句就是相同的,但他们却不得不一个字一个字地重复地将这些内容敲入每个.c(.cpp)文件。但更为恐怖的是,当其中 一个声明有变更时,就需要检查所有的.c(.cpp)文件,并修改其中的声明,啊~简直是世界末日降临!终于,...

weixin_31544577的博客 2693

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vs2022中<stdio.h>头文件问题

vs2022使用过程中的问题

specialkey的博客 285

学习笔记

1, 学习第二章“数据类型”内容。 2, 内容:变量与常量,基本内置类型,声明与定义,static , extern(略懂) , const,auto , register , typedef(不太懂), #define , 枚举(还没看)。 3,疑问 (1)声明与定义不太懂(2)强制转换。(3)extern用法不会,没有调试成功。(4)typedef struct的用法...

sinat_42650353的博客 197

C# 预处理器指令

1.1 #define 和 #undef #define:在文件开头声明 配合#if #endif 让编译器实现代码块的执行 #undef: 在文件开头说明 配合#if #endif 让编译器不编译代码块中内容 1.2 #if、#elif、#else、#endif 结合#define、#undef 以及逻辑运算 使编译器执行对应代码块下的内容 1.3 #warning 和 #error #warning:当编译器执行到对应语句时,会提示声明的警告文本、代码正常运行 #error:当编译器

weixin_45496106的博客 976

【黑马程序员】C语言学习笔记(3)-预处理指令

C语言源程序在进行编译、链接之前会进行检测是否有一些特殊的预处理指令,若检测一些特殊的预处理指令则会进行相应的处理。C语言中多有的预处理指令都以符号“#”开头,并且结尾不使用分号。预处理指令在程序中出现的位置没有限定,即可以出现在任何地方,它的作用范围是从它出现的位置到文件尾。但一般我们把预处理指令写在文件的开头,这种情况下,他的作用范围会是整个源程序文件。C语言主要提供了三大类预处理指令:宏定义

Little__Coder的博客 636

C/C++语言预处理,编译,汇编,链接的详细过程讲解

一、问题背景 最近博主在复习各类编程语言知识时,在类比Java解释型高级语言的运行机制时,第一时间想到了C/C++的运行机制,于是博主我查阅相关资料后对C/C++的运行机制做一个详细但易懂的总结归纳。 二、C/C++的运行机制 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。 预处理编译汇编链接hello.c, hello.hhello.ihello.shello.o或hello.o...

快乐李同学的博客 6216

编译链接和预处理

因为我们的宏定义不会进行语法的检查,只会进行无脑的替换,即使我们在宏定义当中的语法是错误的我们的程序也会直接替换到正式的代码当中,对编写代码造成困扰。🌺按照我们正常的代码的编写的逻辑我们上面的代码应该可以正常的运行但是实际上却不是,这是因为我们在if当中使用了宏定义替换,而我们的宏定义替换已经定义了一个分号,而我们在if语句当中又重新加入了一个分号,使得我们下面的if无法进行特定的匹配。假如我们在我们的程序当中定义了一个宏常量,那么我们在程序进行预处理的时候会将我们的关键字直接替换成我们对应的值。

lmbuhuiku的博客 577

Learning C++ 之 1.10 初识预处理器

预处理器是一个很好的思想,即一个在程序编译之前提前独立运行的一段代码。当预处理器运行的时候,他会从code的头到尾寻找特殊指令。特殊指令一般指的是以#开头的,回车结束的代码(不是;号结尾)。有非常多的特殊指令符,下面会一一介绍。预处理器并不是智能的,他不理解C++语法,她只是在编译器运行之前操作脚本,然后预处理器的结果输出给编译器。预处理器并不会修改代码,相反,预处理器做的所有操作都是存在临时内存...

yingmuliuchuan的博客 229

C程序编译流程之预处理器

介绍C程序编译流程的预处理环节

Daniel Leng的博客 273

#90_代码开关预处理的详解

摘要: 本文介绍了在C语言中使用预处理器宏控制死代码的几种方法。用户已定义#define SWITCH_FOR_DEAD_CODE 0宏开关,可通过以下方式使用: #if !SWITCH_FOR_DEAD_CODE包裹代码(当宏为0时编译) #if SWITCH_FOR_DEAD_CODE包裹代码(当宏为非0时编译) 直接使用#if 0...#endif简单禁用代码 文中澄清了常见的错误用法,如#ifnend不是有效指令,正确的结束标记应为#endif,并区分了#ifndef(检查未定义)的不同用途。提供了

qq_73850061的博客 261
上一篇: .NET面试题
下一篇: Nhibernate学习笔记问题记录
blue_maple
博客等级 码龄22年 8粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值