宏、条件编译(#ifdef)、#include(头文件包含)、#error和 #pragma的区别、#和##的含义和应用

简介: 宏、条件编译(#ifdef)、#include(头文件包含)、#error和 #pragma的区别、#和##的含义和应用

1、在C语言预处理阶段,编译器首先对代码的处理时:先去注释,再宏替换。


2、在源文件的任何地方,宏都是可以定义的,与是否在函数内外无关。


3、宏的作用范围是:从定义处开始,往后的直到程序结束都是有效的。可以使用#undef取消宏定义的。


4、#ifdef:判定的是宏是否被定义,与宏定义的值是真是假没有关系。


5、#if:判定的不仅是这个宏是否被定义,还要判定定义的宏的值是真是假。


6、

头文件包含:


(1)#include 本质是把头文件中的相关内容,直接拷贝到源文件中。


(2)所有的头文件包含,都必须带上条件编译,防止被重复包含,即重复拷贝,影响编译效率。


所有的头文件都推荐写入下面代码:



意思是只有第一次检测的时候xxx没有被定义,然后定义xxx再进入#ifdef和#endif内部,因为此时xxx已经被定义了,所以往后的每一次#ifndef都不成立,所以不会进到内部,所以能有效地避免了头文件的重复包含。


#error



#pragma:



对比#error和#pragma


#error就是通过报错的方式直接阻止编译器完成编译。


#pragma message()作用:可以用来进行对代码中特定的符号(比如其他宏定义)进行是否存在:进行编译时消息提醒。


相邻字符串具有自动连接属性。



#的作用



把一个整数转换成字符串可以通过以下做法:



但是不能通过以下方式转换:



##的作用:


将##相连的两个符号(不是字符串),连接成为一个符号。


比如说我们要用科学计数法计算一个数正常来说应该用以下的写法:



但是我们为了更方便一些,可以利用##定义一个宏:


相关文章
|
机器学习/深度学习 算法 自动驾驶
|
Android开发
【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
1659 0
【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
|
关系型数据库 MySQL 数据安全/隐私保护
查看mysql 默认端口号和修改端口号
1. 登录mysql mysql -u root -p //输入密码    2. 使用命令show global variables like 'port';查看端口号 mysql> show global variables like 'port';    3. 修改端口,编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出。
23008 0
|
11月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
2064 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
安全 Java Linux
docker阿里云镜像加速
我们都知道因为某些原因我们访问外网都是比较慢的,比如我们使用maven下载依赖时是一个道理,同样的使用docker从docker.hub上下载镜像也是比较慢的。针对这种访问官网比较慢的情况有两种方案,第一种就是使用国内的仓库,第二种就是使用一个加速器。这里我们配置docker的镜像加速从来来实现提速。
13325 1
docker阿里云镜像加速
|
11月前
|
存储 人工智能 运维
Forrester Wave:阿里云持续领跑中国公共云市场
全球研究和咨询公司Forrester发布了中国云计算Forrester Wave报告,称AI已成为驱动企业上云的新因素,中国公共云市场正在快速成长成熟。阿里云等8家云计算公司入围 2024 Forrester Wave报告,在全部32项评测中阿里云揽获23项最高分,整体位居“领导者象限”。
|
11月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
3900 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
11月前
|
机器学习/深度学习 计算机视觉
【小样本图像分割-1】PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment
本文介绍了ICCV 2019的一篇关于小样本图像语义分割的论文《PANet: Few-Shot Image Semantic Segmentation With Prototype Alignment》。PANet通过度量学习方法,从支持集中的少量标注样本中学习类的原型表示,并通过非参数度量学习对查询图像进行分割。该方法在PASCAL-5i数据集上取得了显著的性能提升,1-shot和5-shot设置下的mIoU分别达到48.1%和55.7%。PANet还引入了原型对齐正则化,以提高模型的泛化能力。
409 0
【小样本图像分割-1】PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment
|
开发工具 C++ git
QT基础【1-开发环境安装】
QT基础【1-开发环境安装】
|
安全 算法 Android开发
Android10.0 人脸解锁(上)
Android10.0 人脸解锁(上)
Android10.0 人脸解锁(上)