C/C++编程笔记:C / C ++预处理器,带你更好地学习C++程序

顾名思义,预处理器是在编译之前处理我们的源代码的程序。在C / C ++中编写程序和执行程序之间涉及许多步骤。在实际开始学习预处理器之前,让我们看一下这些步骤。

您可以在上图中看到中间步骤。程序员编写的源代码存储在文件program.c中。然后,该文件由预处理器处理,并生成名为程序的扩展源代码文件。该扩展文件由编译器编译,并生成一个名为program .obj的目标代码文件。最后,链接器将此目标代码文件链接到库函数的目标代码,以生成可执行文件program.exe。 

预处理程序提供预处理程序指令,这些指令告诉编译器在编译之前对源代码进行预处理。所有这些预处理程序指令均以“#”(哈希)符号开头。“#”符号表示无论以#开头的任何语句都将进入预处理程序,并且预处理程序将执行此语句。一些预处理器指令的实例为:#包括#定义的#ifndef等记住,#符号仅提供其将去到预处理器的路径,并且命令例如包括由预处理器程序处理。例如,include将在程序中包含额外的代码。我们可以将这些预处理程序指令放置在程序中的任何位置。 

预处理器指令有4种主要类型:

文件包含

条件编译

其他指令

现在让我们详细了解这些指令中的每一个。 

:宏是程序中的一段代码,具有一定的名称。只要编译器遇到此名称,编译器就会用实际的代码片段替换该名称。“ #define”指令用于定义宏。现在让我们借助程序来了解宏定义: 

C++:

C语言:

在上述程序中,编译器执行LIMIT时,将其替换为5。宏定义中的LIMIT被称为宏模板,而5则是宏扩展。 

注意:宏定义的末尾没有分号(';')。宏定义不需要以分号结尾。

带参数的宏:我们还可以将参数传递给宏。用参数定义的宏的作用类似于函数。让我们通过一个程序来理解这一点: 

C++:

C语言:

从上面的程序我们可以看到,每当编译器在程序中找到AREA(l,b)时,它将用语句(l * b)替换它。不仅如此,传递给宏模板AREA(l,b)的值还将在语句(l * b)中替换。因此,AREA(10,5)等于10 * 5。 

文件包含:这种类型的预处理程序指令告诉编译器在源代码程序中包含文件。用户可以在程序中包括两种类型的文件: 

头文件或标准文件:这些文件包含预定义函数的定义,例如printf(),scanf()等。必须包含这些文件才能使用这些函数。在不同的头文件中声明了不同的功能。例如,标准I / O功能在“ iostream”文件中,而执行字符串操作的功能在“ string”文件中。 

语法: 

#include< file_name >

其中file_name是要包含的文件的名称。“ <”和“>”括号告诉编译器在标准目录中查找文件。 

用户定义的文件:当程序变得很大时,将其分成较小的文件并在需要时包含它是一个很好的实践。这些类型的文件是用户定义的文件。这些文件可以包括为: 

#include"filename"

条件编译:条件编译指令是指令的类型,可帮助根据某些条件编译程序的特定部分或跳过程序某些特定部分的编译。这可以借助两个预处理命令“ ifdef ”和“ endif ”来完成。

语法: 

#ifdef macro_name    

声明1;    

声明2;    

statement3; 

.....

statementN;

#endif

如果定义了名称为“ macroname ”的宏,则该语句块将正常执行,但如果未定义,则编译器将直接跳过该语句块。 

其他指令:除了上述指令外,还有另外两个不常用的指令。这些是: 

#undef指令:#undef指令用于取消定义现有宏。该指令的工作方式为: 

#undef LIMIT

使用此语句将取消定义现有的宏LIMIT。在此语句之后,每个“ #ifdef LIMIT”语句将评估为false。 

#pragma指令:此指令是一种特殊用途的指令,用于打开或关闭某些功能。这类指令是特定于编译器的,即,它们因编译器而异。下面讨论了一些#pragma指令: 

#pragma startup#pragma exit:这些指令可帮助我们指定程序启动之前(控件传递到main()之前)和程序退出之前(控件从main()返回之前)所需运行的功能。 。 

注意:以下程序不适用于GCC编译器。 

看下面的程序:

C++:

C语言:

当在GCC编译器上运行时,以上代码将产生如下输出: 

Inside main()

发生这种情况是因为GCC不支持#pragma启动或退出。但是,您可以将以下代码用于GCC编译器上的类似输出。 

C语言:

#pragma warn指令:该指令用于隐藏在编译过程中显示的警告消息。 

我们可以隐藏警告,如下所示: 

#pragma warn -rvl:该指令隐藏应该在应返回值的函数不返回值时引发的警告。

#pragma warn -par:该指令隐藏了当函数不使用传递给它的参数时引发的警告。

#pragma warn -rch:此伪指令隐藏在无法访问代码时发出的警告。例如:在函数的return语句之后编写的任何代码均不可访问。

希望对大家有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,Q群464501141点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍分享:

编程学习视频分享:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值