iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++预处理浅析使用形式
  • 558
分享到

C/C++预处理浅析使用形式

2024-04-02 19:04:59 558人浏览 薄情痞子
摘要

目录文件包含宏定义无参数的宏带参宏定义条件编译文件包含 文件包含命令行的一般形式为: #include"文件名" 或 #include<文件名> 值得注意的是, (1)&

文件包含

文件包含命令行的一般形式为:

#include"文件名" 或 #include<文件名>

值得注意的是,

(1)<>表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的include目录),而不在当前源文件目录去查找;

(2) ""则表示首先在当前源文件目录中查找,若未找到才到包含目录中去查找。

(3)一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。

(4)一个包含文件中可以包含别的包含文件。

宏定义

C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简单的字符串替换,根据是否带参数分为无参和带参。

无参数的宏

#define 宏名 一段符号

其中一段符号表示你需要的用宏名来代替的一段符号,在编译预处理时,程序中出现的所有你设定的宏名都将被这段符号代替。

样例:#defineip114514

表示程序中出现的所有ip都将表示114514。

测试

#include <stdio.h>
#define	ip  114514
int main()
{
	int a = ip;
    printf("%d\n",a);
    return 0;
}

结果:

一般我们使用宏定义是为了方便修改和管理代码。

需要注意的是宏定义不作语法检查,只有在编译被宏展开后的源程序才会报错。

测试1:

#include <stdio.h>
#define	ip  1+2 = 3
int main()
{
    int a = 0;
    printf("%d\n", a);
    return 0;
}

结果:

这里没使用宏,宏没被展开,宏没做语法检查而不报错。

测试2:

#include <stdio.h>
#define	ip  1+2 = 3
int main()
{
    int a = ip;
    printf("%d\n", a);
    return 0;
}

结果:

宏被展开了,直接编译报错。

带参宏定义

#define 宏名(形参表) 字符串

在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。

对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。

样例:#define MULTIPLY_2(x,y) ((x)*(y))

注意:在这个宏中,x和y作为参数在表达式中,应被括号分隔开。也就是说当宏中有表达式时,其内部参数需被括号独立,防止程序出错。

样例:

#include <stdio.h>
#define	a1(x,y) (x*y)
#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);//sum1=(a+b*b)
    int sum2 = a2(a + b, b);//sum2=((a+b)*b)
    printf("%d %d\n", sum1,sum2);
    return 0;
}

结果:

条件编译

一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是条件编译。

样例1:

#include <stdio.h>
#define	a1(x,y) (x*y)
#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);
	int sum2 = 0;
#ifdef a2   //这里只是检查宏有没有定义,并不检查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	if (a == 2)
	{
		int sum2 = a2(a + b, b);
	}
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
    return 0;
}

结果:

样例2:

#include <stdio.h>
#define	a1(x,y) (x*y)
//#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);
	int sum2 = 0;
#ifdef a2   //这里只是检查宏有没有定义,并不检查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	sum2 = sum1;
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
    return 0;
}

结果:

显而易见的,宏有没有定义直接影响了程序运行的结果。

ps:c编译器中,有几个特殊形式的预定义宏需要我们注意。

__FILE__ 宏所在文件的源文件名

__FUNCTION__宏所在函数名

__LINE__宏所在行的行号

__DATE__ 代码编译的日期

__TIME__ 代码编译的时间

样例:

#include <stdio.h>
#define	a1(x,y) (x*y)
//#define	a2(x,y) ((x)*(y))
int main()
{
    int a = 1;
    int b = 2;
    int sum1 = a1(a + b, b);
	int sum2 = 0;
#ifdef a2   //这里只是检查宏有没有定义,并不检查值
	if (a == 1)
	{
		sum2 = a2(a + b, b);
	}
#else
	sum2 = sum1;
#endif
	{
		printf("%d %d\n", sum1,sum2);
	}
	printf("文件名:%s\n", __FILE__);
	printf("函数名:%s\n", __FUNCTION__);
	printf("行  号:%d\n", __LINE__);  // 
	printf("日  期:%s\n", __DATE__);  // 
	printf("时  间:%s\n", __TIME__);  // 
	return 0;
}

结果:

到此这篇关于C/C++预处理浅析使用形式的文章就介绍到这了,更多相关c++预处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++预处理浅析使用形式

本文链接: https://www.lsjlt.com/news/167209.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++预处理浅析使用形式
    目录文件包含宏定义无参数的宏带参宏定义条件编译文件包含 文件包含命令行的一般形式为: #include"文件名" 或 #include<文件名> 值得注意的是, (1)&...
    99+
    2024-04-02
  • C# AttributeUsage的使用浅析
    AttributeUsage是一个用于指定自定义属性的使用规范的特性类。通过使用AttributeUsage特性,可以限制自定义属性...
    99+
    2023-09-12
    C#
  • C++预处理连接方法怎么使用
    这篇文章主要讲解了“C++预处理连接方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++预处理连接方法怎么使用”吧!C++预处理连接(Preprocessor Concatena...
    99+
    2023-07-05
  • 如何浅析C#打印和C#打印预览的实现
    如何浅析C#打印和C#打印预览的实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们谈到C#打印和C#打印预览的实现其中主要就是包括:页面设置、打印预览、打印...
    99+
    2023-06-17
  • C语言中预处理的示例分析
    小编给大家分享一下C语言中预处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!#define定义宏带副作用的宏参数我们来看如下一段代码结果分别为12,1...
    99+
    2023-06-25
  • C++中的策略模式浅析
    策略模式主要解决在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护,其实际就是用来抽象变化的(和开放-封闭原则是一个原理),只要在分析过程中我们发现...
    99+
    2023-02-27
    C++策略模式 C++设计模式 C++ 设计模式 策略模式
  • C语言预编译#define(预处理)
    目录一、预定义符号二、#define 定义标识符三、#define 定义宏四、#define 替换规则:五、#和## 两个符号(少见)六、宏和函数的对比七、#undef一、预定义符号...
    99+
    2024-04-02
  • C++浅析缺省参数的使用
    目录一. 概念二. 分类全缺省参数半缺省参数一. 概念 缺省参数(有些地方叫默认参数)是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否...
    99+
    2024-04-02
  • C语言预处理器使用方法讲解
    目录预处理器实例预定义宏预处理器运算符参数化的宏C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器...
    99+
    2022-12-30
    C语言预处理器 C语言预处理
  • C语言浅析指针的使用
    目录指针等价形式转换函数指针主函数指针 指针是一个变量 (1) 作用:只能存储地址的值 (2) 大小:32位操作系统中占4字节;64位操作系统中占8字节 (3) 取地址:& ...
    99+
    2024-04-02
  • C++浅析引用的定义与使用
    目录解释引用引用的作用关于局部变量的引用解释引用 首先我们先来看一个引用的例子 int main() { int a = 10; int& Bin = a; cout ...
    99+
    2024-04-02
  • C++浅析内联函数的使用
    目录一. 概念二. 特性一. 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。 在C++里...
    99+
    2024-04-02
  • C++浅析虚函数使用方法
    目录一、虚函数二、虚函数与纯虚函数的区别三、动态多态阐述虚函数作用和原理、纯虚函数和虚函数的区别。 一、虚函数 首先来看下面这一段代码,首先创建两个类,一个是Dog,另一个是Cat,...
    99+
    2024-04-02
  • C#的define预处理器怎么用
    今天小编给大家分享一下C#的define预处理器怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。#define 预处理器...
    99+
    2023-06-17
  • C#预处理器指令的用法
    目录1,预处理器指令的概念2,预处理器指令的定义与使用2.1,可为空上下文2.2,定义符号2.3,条件编译2.4,定义区域2.5,错误和警告信息2.6,杂注3,预处理器指令的用途结语...
    99+
    2023-05-16
    C# 预处理器指令
  • C#预处理器指令怎么用
    今天小编给大家分享一下C#预处理器指令怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.#warning 和 #err...
    99+
    2023-06-17
  • C语言预处理详解
    目录一,预定义符号二,#define1,#define 定义标识符2,#define 定义宏3,#define 替换规则三,##的作用1,概念2,带副作用的宏参数3,宏和函数对比四,...
    99+
    2024-04-02
  • C语言中的预处理命令怎么使用
    这篇“C语言中的预处理命令怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的预处理命令怎么使用”文章吧。一、预...
    99+
    2023-07-04
  • 浅析C# treeview控件的使用方法
    C#中的treeview控件是用来显示层次结构数据的控件。它通常用于显示树形数据结构,比如文件目录结构、组织结构等。使用treevi...
    99+
    2023-09-22
    C#
  • C++预处理命令:#include用法详解
    C++预处理命令:#include用法详解 在C++中,我们经常需要引用一些库文件或头文件来实现特定的功能。而实现这个操作的方式就是使用C++预处理命令:#include。在本篇文章中,我们将详细讲解...
    99+
    2023-09-22
    c++ java 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作