Pragma是一个编译器指令,它允许我们向编译器添加额外的信息,以便它能够有效地编译代码。这些信息一旦添加,就不在我们的控制范围内,可以改变编译的细节。这个指令是用来访问与编译器相关的特定处理器扩展的。
C++中的pragma
这个编程语言中的pragma是一个指令,由C++的标准提供,用来给编译器提供额外的细节要求。这些细节无法通过程序中的参数或通过代码的逻辑传递。这些衍生物负责承载一个特殊的目的,并在程序中打开或关闭该功能。
pragma的工作
现在我们将了解pragma指令的工作。我们已经知道,这些pragma指令是用来通知编译器一个事件或将要发生的程序的。这些pragma指令在编译前执行,然后在程序的处理过程中跟进。通过这种方式,pragma可以通知编译器忽略一些事情,同时优先处理那些将来要编译的事情。大多数程序员建议在一个程序中只添加一次pragma。这类指令具有很强的编译器特性,因为它们在不同的编译器中是不同的。不是所有的编译器都使用相同的pragma。这意味着Pragma指令也依赖于机器和操作系统。
Pragma指令的语法
Pragma有两种语法,它在程序中的实现方式是这样的。两种语法中的参数和关键字都是一样的,但区别在于启动代码语句。被称为实现pragma的标准语法是以hashtag和pragma关键字开始的,它是一个简单的字符串,被称为 "token string"。
# pragma token-string
而第二种语法与第一种语法相似,但不同的是,pragma关键字前的操作符是"__"。
# __pragma(token-string)
这种语法在关键字前使用两个下划线。一些最常用的token字符串是exit、warning等。我们在这里对它们进行了简单的解释。
# pragma startup
在我们使用主程序的代码执行之前,需要先执行pragma中存在的指定函数,因为这将导致编译器通过作为执行的主动权来运行程序。
# pragma exit
和启动一样,在程序结束前,pragma中指定的这个函数也需要提前运行。
# pragma warn
这是一个特殊的功能。这些函数隐藏了错误警告或那些恼人的警告,这些警告在每次代码执行后都会非常频繁地显示。但有时,一些重要的警告也会因为这个功能而被忽略。
# GCC dependency
它检查当前使用的文件和其他文件的日期。如果其他文件是最新的,那么它就显示该文件的警告。
# pragma GCC poison
这是用来阻止源代码或程序中的标识符的。
现在我们将在例子中分别使用它们来解释Plasma指令的工作。
Plasma启动和pragma退出
这些指令是用来指定函数的。确定先运行或后运行的特定功能。这些指令,正如我们之前提到的,需要在程序启动前运行。

而类似地,在关闭的情况下,就在程序存在之前,这些指令会先执行。这里我们将在代码中加入pragma指令。下面的图片包含了整个代码的一瞥,其中我们直接使用了这些指令,但不幸的是,这个程序不能在GCC和G++编译器中运行。因此,我们更新了程序、源代码以执行所需的输出。这里声明了两个带有主程序的函数。

输出显示,函数和主程序被执行,通过使用G++编译器显示答案。
$ g++ -o p p.c
$ ./p

Pragma warn指令
这是用来隐藏包含编译过程中显示的警告的信息。这些警告问题在一些紧急和大的错误发生时很有用。这个功能用于大型源代码的情况,因此我们可以通过隐藏所有显示的警告来解决所有的错误。如果我们稍微改变一下语法,这些警告就不会继续隐藏,而会重新显示出来。
# pragma warn +xxx (To show the warning)
# pragma warn -xxx (To hide the warning)
这两种语法用于隐藏和解除警告。那些可以隐藏的警告列在下面。
- #Pragma warn -rvl:这种类型的指令隐藏了当我们设计一个函数返回值但作为'void'时产生的警告。
- #pragma warn -par:这些警告被这种pragma指令所隐藏,当一个函数不使用传给它的参数时,就会引发这些警告。
- #pragma warn -rch:那些警告被这个指令所影响,我们无法接触到这些代码。例如,如果一个代码是在使用了返回语句后写的,那么它就无法到达。
现在我们来举一个例子。在这个例子中,我们已经初始化了所有三个pragmas警告指令。
在主程序中,我们使用了一个返回类型 "int "和一个变量 "x "的参数。只要不使用返回语句,就会显示一个简单的字。同样地,参数中的变量也没有在函数或主程序中使用。

因此,有可能会出现两个警告。这两个警告会因为两个指令而隐藏起来。一个是pragma warn -rvl,另一个是pragma warn -par。但这两个警告都会发生,不会出现。因此,程序将编译成功,并显示出答案。

#Pragma GCC poison
这是由GCC编译器支持的,有助于从程序中彻底删除源代码中的标识符。现在我们将以这个指令为例进行应用。
通过使用这个指令,我们也在这里初始化了一个变量,用于条件中,如果条件成功,就打印两个字。

但当你编译代码并执行时,会出现以下错误,即错误发生的行号。

#Pragma GCC dependency
它允许我们对当前文件和第二个文件的日期进行比较。如果另一个文件的日期是最新的,那么就会显示一个警告通知。当当前文件从第二个文件重新生成时,这将是有利的。
# pragma GCC dependency "/usr/folder/time.h" rerun fixfolder
总结
这篇文章 "C++ pragma衍生物 "旨在帮助用户了解Pragma的基本描述和它在编程语言中的工作,特别是在C++中。两个语法解释了所有可能的字符串标记,每个派生例子都得到了很好的解释,以承认初学者对每个pragma在Linux环境操作系统中的实现有容易理解的概念。