📜  C中的编译指示指令的类型

📅  最后修改于: 2021-05-25 21:40:11             🧑  作者: Mango

Pragma指令: pragma指令用于控制程序特定部分中编译器的操作,而不会影响整个程序。

  • 语法指令包含在C程序中以生效。
  • 编译指示的作用将从被包含到编译单元的末尾或直到另一个编译指示改变其状态为止。
  • #pragma指令是对编译器的指令,通常在预处理期间会被忽略。

句法:

在这里,字符串可以是使用任何必需参数提供给编译器的指令之一。

Instruction Description
COPYRIGHT To specify a copyright string
COPYRIGHT_DATE To specify a copyright date for the copyright string
OPTIMIZE  To turn the optimization feature on or off
LOCALITY  To name a coded subspace
OPT_LEVEL To set the level of optimization
HP_SHLIB_VERSION To create a version of a shared library routine
VERSION ID To specify a version string
ONCE Specify that file opened only once

实用指令的类型

编译版权:

编译指示版权的语法为:

  • 在此,字符串指定目标文件中版权消息中包含的字符集。
  • 如果在编译指示版权期间未指定任何数据,那么版权消息中将使用当前年份:

示例:如果复制写入是通过以下方式进行的:

  • 然后将以下字符串放置在目标代码中(假设当前年份是2020年):

注意:要查看COPYRIGHT字符串以及目标文件中的任何其他字符串,请使用带-a选项的字符串(1)命令。

例子:

编译指示COPYRIGHT_DATE:

受版权保护的语法的语法为:

在这里,字符串是COPYRIGHT编译指示将使用的日期。
考虑下面给出的以下示例:

上面的杂注将在目标代码中放置以下字符串:

注意:要查看COPYRIGHT_DATE字符串以及目标文件中的任何其他字符串,请使用带-a选项的字符串(1)命令。
例子:

编译指示OPT_LEVEL:

用于将优化级别设置为1、2、3或4的编译指示OPT_LEVEL的语法为:

像优化编译指示一样,即使编译指示也不能在函数。最后,仅在文件开头允许使用OPT_LEVEL 3和4。

下面是C语言中的示例代码片段,说明了编译指示级别的用法:

C
aCC - O prog.C
  
#pragma OPT_LEVEL 1
  
      // Optimise func1() at level 1
      void
      Func1()
{
}
  
#pragma OPT_LEVEL 2
  
// Optimize Func2() to at level 2
void Func2()
{
}


C++
// Set optimization to level 2
// for Prog.C
aCC + O2 Prog.C
  
#pragma OPTIMISE OFF
      void Func1
{
    // Turn off optimization for
    // this function
}
  
#pragma OPTIMISE ON
Void Func2()
{
    // Restore optimization to level 2
}


编译优化:

使用pragma OPTIMIZE的语法为:

  • 编译优化主要用于在源程序的部分中打开/关闭优化。
  • 但是,在使用编译指示时,请在ACC命令上指定优化选项之一(同时提供命令以编译程序),否则,将忽略该编译指示。
  • 另外,请记住,函数内不能使用编译优化。

下面是C语言中的示例代码段,说明了优化编译指示的用法:

C++

// Set optimization to level 2
// for Prog.C
aCC + O2 Prog.C
  
#pragma OPTIMISE OFF
      void Func1
{
    // Turn off optimization for
    // this function
}
  
#pragma OPTIMISE ON
Void Func2()
{
    // Restore optimization to level 2
}

实用说明HP_SHLIB_VERSION

用于创建共享库例程的不同版本的HP_SHLIB_VERSION的语法为:

例子:

  • 在这里,data参数采用月/年的形式,可以选择用引号引起来。
  • 必须使用1到12之间的任何数字指定月份。
  • 可以将年份指定为年份的后两位数字(2011年为11)或全年规范(2011年)。
  • 以下是11到20的两位数实数代码,分别代表2011到2020年。
  • 仅当对源文件进行不兼容的更改时才应使用编译指示。

实用性当地:

用于指定要与写入可重定位目标模块的代码关联的名称的编译指示局部性的语法为:

例子:

  • 在上面的示例中,字符串(“ Geeks For Geeks”)指定用于编码子空间的名称。
  • 在此指令之后,该指令之后的所有代码都与字符串指定的名称相关联。
  • 唯一的LOCALITY编译指示的最小范围是一个函数。

pragma版本ID:

编译指示VERSION ID的语法可以指定为:

这里的字符串是被放置在目标文件中字符的字符串。

例子:

在上面的示例中,编译指示将GFG专用限制版本1234 5.8.0 1.10的字符怪胎放置到目标文件中。

一次编译指示:

一次编译指示指定在其中指定此编译指示目录的文件仅在编译器打开特定文件的建筑物中才包含一次,其语法可表示为:

结论:

  • 编译指示符主要用于C的每个实现都支持其主机或操作系统独有的某些功能的地方。
  • 例如,在某些情况下,某些程序可能需要对放置数据的内存区域进行精确控制,或控制某些函数接收参数的方式, #pragma指令为每个编译器提供了特定于操作系统的功能,同时保持了整体兼容性与C语言。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。