C语言宏和预处理

news2024/11/16 7:29:45

C语言宏和预处理

  • 【1】include
  • 【2】【#pragma】
  • 【3】C++ #include
  • 【4】# 和 ## 操作符
  • 【5】宏替换
  • 【6】#line
  • 【7】#error
  • 【8】#undef
  • 【9】源码
  • 【10】结果

在这里插入图片描述

【1】include

#include本命令包含一个文件并在当前位置插入.一般尖括号意味着在标准库目录中搜索,
#include “filename” 引号就表示在当前目录中搜索.

【2】【#pragma】

#pragma命令可以让编程者让编译器执行某些事.
#pragma once //代表不论其他文件写了多少遍这个头 都只编译一次

学习自定义头文件

#ifndef __EXHEAD_H__
#define __EXHEAD_H__

int values=100;  //在这定义初始化
extern const char *buf="djfhj"; //初始化声明变量(变量的定义)
#endif

【3】C++ #include

整洁的新C++ #include目录不需要直接映射到filenames(没有.h), 至少对于标准库是这样

#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>


using namespace std;

【4】# 和 ## 操作符

# 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首个参数返回为一个带引号的字符串

#define to_string( s ) # s
//使用 ## 连结 ## 前后 的内容
#define concatenate( x, y )  x ## y

【5】宏替换

#define TRUE 1
#define FALSE 0


//#define命令的另外一个功能就是替换参数,使它 假冒创建函数一样使用. 如下的代码: 
#define absolute_value( x ) ( ((x) < 0) ? (x) : 2 )
    
#define DEBUG 100

【6】#line

更改行号为10,当前文件改为"Y预处理.cpp".

#line 10  "Y预处理.cpp"

【7】#error

当遇到一个#error时,编译器会自动输出行号而无论message的内容,本命令大多是用于调试.

#error  err_message   //终止错误 

【8】#undef

//以下操作相当于没有操作
#define MIN 19
#undef  MIN
//#undef命令取消一个先前已定义的宏变量, 譬如一个用#define定义的变量. 

_cplusplus 变量只在编译一个C++程序时定义.
STDC 变量在编译一个C程序时定义,编译C++时也有可能定义.

【9】源码

int main(int argc, char const *argv[])
{
    //参数宏函数
    int xy=100;
    cout << to_string( Hello World! ) << endl;
    cout << concatenate(x,y) << endl;


    int x = 1;
    cout<< absolute_value( x )<<endl;


    //传说中的宏判断
    #if TRUE 
        cout<<"真"<<endl;;
    #else
        cout<<"假"<<endl;
    #endif


    #ifdef DEBUG  //如果定义的情况
      cout << "This is the test version"<< endl;
    #else
      cout << "This is the production version!" << endl;
    #endif
    //如果没有定义  就定义
    #ifndef macro
        cout<<"macro"<<endl;
    #elif
        cout<<"xixi"<<endl;
    #endif
    //打印行号
    cout<<__LINE__<<endl;


    //打印当前目录 本文件名
    cout<<__FILE__<<endl;  
   
    cout<<__DATE__<<"  ";  //变量表示当前日期,格式为month/day/year(月/日/年). 


    cout<<__TIME__ <<endl; //变量描述当前的时间,格式为hour:minute:second(时:分:秒). 




    return 0;
}

【10】结果

打印
 PS C:\Users\Administrator\Desktop\C语言函数集合> g++ .\预处理.cpp
 PS C:\Users\Administrator\Desktop\C语言函数集合> ./a
 Hello World!
 100
 2
 真
 This is the test version
 macro
 83
 .\预处理.cpp
 Nov 29 2021  21:55:02

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言与汇编】简单学学C到汇编代码

C语言与汇编 部分过程可参考C primer plus 本书余下的篇幅讨论源代码文件中的内容&#xff1b;本节讨论创建源代码文 件的技巧。有些C实现&#xff08;如Microsoft Visual C、Embarcadero C Builder、Apple Xcode、Open Watcom C、Digital Mars C和Freescale CodeWarrior&…

精品基于SSM的民宿预订管理系统

《民宿预订管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;my…

云原生事件驱动框架(KnativeEventing)

事件驱动是指事件在持续事务管理过程中&#xff0c;进行决策的一种策略。可以通过调动可用资源执行相关任务&#xff0c;从而解决不断出现的问题。通俗地说是当用户触发使用行为时对用户行为的响应。在 Serverless 场景下&#xff0c;事件驱动完美符合其设计初衷之一&#xff1…

基于xv6的Copy-On-Write

为什么需要写时拷贝呢&#xff1f; 当 shell执行指令的时候会 fork()&#xff0c;而这个 fork()出来的进程首先会调用的就是 exec来执行对应的命令&#xff0c;如果我们将 fork()创建的进程对地址空间进行了完整的拷贝,那将是一个巨大的消耗 因为在实际应用中&#xff0c;for…

SSM项目整合

文章目录1. 导入依赖2. 配置web.xml文件3. 编写springmvc.xml配置文件4. 编写spring.xml配置文件5. 编写项目整体业务逻辑6. 开发过程中常见状态码错误1. 导入依赖 在整合SSM项目时&#xff0c;需要导入以下依赖 Spring 相关依赖 &#xff08;springmvc相关、事务相关、spring…

凤姐从国外回来会再次爆红吗?她最近的一段话发人深省

随着互联网的发展&#xff0c;也诞生了很多的网红&#xff0c;其实现如今的众多网红&#xff0c;和凤姐比起来都是小巫见大巫。凤姐原名叫罗玉凤&#xff0c;当年因为参加各种选秀节目&#xff0c;再加上鬼使神差语无伦次的言谈&#xff0c;让她一夜之间爆红了网络。 其实当我们…

Pandas统计计数value_counts()的使用

value_counts()方法返回一个序列Series&#xff0c;该序列包含每个值的数量(对于数据框中的任何列&#xff0c;value_counts()方法会返回该列每个项的计数) value_counts()是Series拥有的方法&#xff0c;一般在DataFrame中使用时&#xff0c;需要指定对哪一列进行使用 语法 …

微服务框架 SpringCloud微服务架构 29 ES 集群 29.5 故障转移

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.5 故障转移29.5.1 ES集群的故障转移29.5.2 总结29 ES 集群 …

【图像分割】粒子群优化T熵图像分割【含Matlab源码 286期】

⛄一、简介 本文所采用的基于熵的切割点和最小描述长度原则(MDLP)。 A.特征选择 特征选择是一个组合优化问题&#xff0c;因为在具有N个特征的数据集上有2N个可能的不同特征子集。FS方法通常有两个重要的部分组成&#xff0c;即搜索技术和特征评估方法。 在特征评估方面&am…

Python项目之文化和旅游数据可视化

文章目录关键词一、做什么二、怎么做1.爬取数据和处理2.数据库设计&#xff0c;并将数据写入数据库3.开发后端接口4.使用Echarts官方模板三、效果展示关键词 Python后端开发Python网络爬虫Echarts可视化面向对象(见源码) 一、做什么 国家5A级旅游景区数据可视化 国家级旅游休…

状态设计模式

一、状态模式 1、定义 状态模式&#xff08;State Pattern&#xff09;又称作状态机模式&#xff08;State Machine Pattern&#xff09;&#xff0c;允许对象在内部状态发生改变时改变它的行为&#xff0c;对象看起来好像修改了它的类。属于行为型设计模式。 状态模式的核心是…

Python:面向对象

目录 一、类的定义 基本语法 python与Java关于类的封装的区别 自定义构造方法 Java与Python的区别 源码 同一个类多种构造函数的构建 源码 二、魔法方法 基础部分 比较部分 与Java的区别 容器类型 三、属性管理 四、封装 基础部分 方法拓展 五、继承&多态 继…

基础IO——系统调用文件

文章目录1. 知识补充和回顾1.1 回顾C文件接口1.2 理论理解2. 系统调用文件接口2.1 open2.2 怎么使用2.3 close和write2.4 read1. 知识补充和回顾 1. 文件文件内容文件属性。即使创建一个空文件&#xff0c;也会占据磁盘数据。 2. 文件操作文件内容操作文件属性操作。在操作文件…

域名+七牛云+PicGo+pypora

域名七牛云PicGopypora 前提准备&#xff1a; 域名&#xff08;自己的域名&#xff09;七牛云 免费注册申请10G空间够用picGo 地址pypora &#xff08;自行下载&#xff09; GO&#xff01;&#xff01;&#xff01; 七牛云 注册--->登录--->控制台找到对象存储新建…

如何在AndroidStudio中使用GitHub

文章目录1.确认是否安装git2.添加GitHub账户3.创建库4.创建分支5. push内容在项目中肯定要集成版本管理工具&#xff0c;不过有时候更换电脑或者升级AndroidStudio时原来集成的内容就不在了&#xff0c;还在再次集成git。时间长了就容易忘记如何集成Git&#xff0c;因此整理总结…

工作10年我面试过上百个程序员,真想对他们说…

V-xin&#xff1a;ruyuanhadeng获得600页原创精品文章汇总PDF 一、写在前面 最近收到不少读者反馈&#xff0c;说自己在应聘一些中大型互联网公司的Java工程师岗位时遇到了不少困惑。 这些同学说自己也做了精心准备&#xff0c;网上搜集了不少Java面试题&#xff0c;然而实际…

详解c++---内存管理

这里写目录标题c语言在堆上申请空间malloccallocreallocfreec中向堆中申请空间的形式new的介绍delete的介绍new与自定义类型new与malloc的不同定位newoperator new与operator delete函数c语言在堆上申请空间 在之前的学习中我们知道c语言主要是通过malloc free calloc&#xf…

Java基础-常用API的使用方法(Math,System,Runtime,Object,BigInteger,BigDecimal)(1)

1 Math类 1.1 概述 tips&#xff1a;了解内容 查看API文档&#xff0c;我们可以看到API文档中关于Math类的定义如下&#xff1a; Math类所在包为java.lang包&#xff0c;因此在使用的时候不需要进行导包。并且Math类被final修饰了&#xff0c;因此该类是不能被继承的。 Math类…

J - 食物链 POJ - 1182

思路&#xff1a; 首先我们要理清楚三种动物之间的关系&#xff0c;那么可以用A到B的距离为1代表为A吃B&#xff0c; 那么就有下图的关系 那么我们用d1表示吃&#xff0c;d2表示被吃&#xff0c;d3表示是同类 对于另一张图也是符合的 然后我们去找每个点和他的根节点的关系 …

resnet(4)------全连接层与softmax

文章目录1. 全连接层2. SoftMax算法1. 全连接层 全连接层&#xff0c;指的是每一个结点都与上一层的所有结点相连&#xff0c;用来把前面几层提取到的特征综合起来。 举个例子&#xff0c;前面通过卷积和池化层提取出来的特征有眼睛鼻子和嘴巴&#xff0c;那我们能单独通过这…