您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 指令处理 >

预处理指令pragma db code是什么意思?

发布时间:2019-07-23 22:34 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。

  #pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。

  message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,

  当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,

  此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏,

  它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

  只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,

  表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,

  但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。

  有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。

  #pragma warning( push, n )保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。

  #pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。例如:

  在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。

  #pragma comment(lib, wsock32.lib)

  展开全部用法(pragma)是一种特殊类型的模块,它影响你的程序编译阶段。有些用法模块可以影响程序的 运行阶段。把它们当作一种编译器提示。因为它们需要在编译时出现,所以只有通过 use 或者 no 调用它们的时候它们才能运转,而到了 require 或者 do 运行的时候,编译早就完了。习惯上,用法名字都是用小写字符写的,因为小写模块名字是为 Perl 版本自己保留的。在写你自己的模块的时候,至少在模块名字中使用一个大写字符以避免和用法名字冲突。和普通模块不同的是,大多数用法把它们的影响局限于调用它们的最内层的闭合块。换句话说, 它们是词法范围的,就好象 my 变量一样。通常,一个外层块的词法范围包括任何嵌在它内部的 内层块,但是内层块可以用 no 语句撤消一个来自外层块的词法范围用法: use strict; use integer; { no strict refs; # 允许符号引用 no integer; # 假设是浮点算术 # .... } 用法模块比 Perl 带的其他模块里这种用法更多一些,而它们也形成了完成而又基本的 Perl 编译环境。如果你不知道怎样给编译器传递提示,那么你很难把编译器用好,因为我们将在描述用法上 下一些工夫。另外一件要注意的事情是我们经常拿用法做特性原型,稍后便把它们编码成“真正”的语法。因此 你会在一些程序里看到废弃了的用法,比如 use attrs,现在它的功能已经是子过程声明语法直接 支持了的部分了。类似的,use vars 现在正处在被 our 声明代替的过程中。而 use subs 可能 将来会被普通子过程声明中的 override 属性代替。我们现在正快得可怕地破坏做事情的老方法, 但是我们认为新方法更漂亮一些。

  知道合伙人教育行家采纳数:10570获赞数:95909吃苦耐劳 勤勤恳恳 对工作认真负责 做事细心 善于发现问题解决问题向TA提问展开全部在所有的预处理指令中,#Pragma

  指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和 C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

  (1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗

  口中输出相应的信息,这对于源代 码信息的控制是非常重要的。其使用方法为:

  当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假

  设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法

  当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_

  X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了

  它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

  只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

  hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太

  有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma

  (5)#pragma resource *.dfm表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体

  展开全部一、作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和 C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

  1.#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。

  2.#pragma warning。允许有选择性的修改编译器的警告消息的行为。有如下用法:

  3.#pragma hdrstop。表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以 加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文 件。

  4.#pragma message。在标准输出设备中输出指定文本信息而不结束程序运行。用法如下:

  #pragma message(消息文本)。当编译器遇到这条指令时就在编译输出窗口中将“消息文本”打印出来。

  5.#pragma data_seg。一般用于DLL中,它能够设置程序中的初始化变量在obj文件中所在的数据段。如果未指定参数,初始化变量将放置在默认数据段.data中,有如下用法:

  对变量进行专门的初始化是很重要的,否则编译器将把它们放在普通的未初始化数据段中而不是放在shared中。如上述的变量b其实是放在了未初始化数据段.bss中。

  6.#pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数,函数将放置在默认代码段.text中,有如下用法:

  7.#pragma pack。用来改变编译器的字节对齐方式。常规用法为:

  #pragma pack(n) //将编译器的字节对齐方式设为n,n的取值一般为1、2、4、8、16,一般默认为8

  #pragma pack(push,4) //将字节对齐方式4放入到内部编译器栈中,并将当前的内存对齐方式设置为4

  #pragma pack(pop) //将内部编译器栈顶的记录弹出,并将其作为当前的内存对齐方式

  #pragma pack(pop,4) //将内部编译器栈顶的记录弹出,并将4作为当前的内存对齐方式

  #pragma pack(pop,r1) //r1为自定义的标识符,将内部编译器中的记录弹出,直到弹出r1,并将r1的值作为当前的内存对齐方式;如果r1不存在,当不做任何操作

  8.#pragma comment。将一个注释记录放置到对象文件或可执行文件中。

  compiler:放置编译器的版本或者名字到一个对象文件,该选项是被linker忽略的。

  lib:放置一个库搜索记录到对象文件中,这个类型应该与commentstring(指定Linker要搜索的lib的名称和路径)所指定的库类型一致。在对象文件中,库的名字跟在默认搜索记录后面;linker搜索这个这个库就像你在命令行输入这个命令一样。你可以在一个源文件中设置多个库搜索记录,它们在obj文件中出现的顺序与在源文件中出现的顺序一样。

  如果默认库和附加库的次序是需要区别的,使用/Zl编译开关可防止默认库放到object模块中。

  linker:指定一个连接选项,这样就不用在命令行输入或者在开发环境中设置了。只有下面的linker选项能被传给Linker:

  /DEFAULTLIB选项将一个library添加到LINK在解析引用时搜索的库列表。用/DEFAULTLIB指定的库在命令行上指定的库之后和obj文件中指定的默认库之前被搜索。

  使用该选项,可以从程序导出函数以便其他程序可以调用该函数,也可以导出数据。通常在DLL中定义导出。

  entryname是调用程序要使用的函数或数据项的名称。ordinal为导出表的索引,取值范围在1至65535;如果没有指定ordinal,则LINK将分配一个。NONAME关键字只将函数导出为序号,没有entryname。DATA 关键字指定导出项为数据项。客户程序中的数据项必须用extern __declspec(dllimport)来声明。

  所有这三种方法可以用在同一个程序中。LINK在生成包含导出的程序时还要创建导入库,除非在生成过程中使用了.exp 文件。

  LINK使用标识符的修饰形式。编译器在创建obj文件时修饰标识符。如果entryname以其未修饰的形式指定给链接器(与其在源代码中一样),则LINK将试图匹配该名称。如果无法找到唯一的匹配名称,则LINK发出错误信息。当需要将标识符指定给链接器时,请使用Dumpbin工具获取该标识符的修饰名形式。

  /INCLUDE选项通知链接器将指定的符号添加到符号表。若要指定多个符号,请在符号名称之间键入逗号(,)、分号(;)或空格。在命令行上,对每个符号需指定一次/INCLUDE:symbol。

  链接器通过将包含符号定义的对象添加到程序来解析symbol。该功能对于添加不会链接到程序的库对象非常有用。

  /MERGE选项将第一个段(from)与第二个段(to)进行联合,并将联合后的段命名为to的名称。

  /SECTION选项用来改变段的属性,当指定段所在的obj文件编译的时候重写段的属性集。

  可移植的可执行文件(PE)中的段(section)与新可执行文件(NE)中的节区(segment)或资源大致相同。

  段(section)中包含代码或数据。与节区(segment)不同的是,段(section)是没有大小限制的连续内存块。有些段中的代码或数据是你的程序直接定义和使用的,而有些数据段是链接器和库管理器(lib.exe)创建的,并且包含了对操作系统来说很重要的信息。

  不要使用以下名称,因为它们与标准名称会冲突,例如,.sdata是RISC平台使用的。

  为段指定一个或多个属性。属性不是大小写敏感的。对于一个段,你必须将希望它具有的属性都进行指定;如果某个属性未指定,则认为是不具备这个属性。如果你未指定R,W或E,则已存在的读,写或可执行状态将不发生改变。

  user:放置一个常规注释到一个对象文件中,该选项是被linker忽略的。

  section-name是必选项,用于指定段的名字。该名字不能与标准段的名字想冲突。可用/SECTION查看标准段的名称列表。

  attributes是可选项,用于指定段的属性。可用属性如下,多个属性间用逗号(,)隔开:

  在创建了段之后,还要使用__declspec(allocate)将代码或数据放入段中。

  10.#pragma push_macro与#pragma pop_macro。前者将指定的宏压入栈中,相当于暂时存储,以备以后使用;后者将栈顶的宏出栈,弹出的宏将覆盖当前名称相同的宏。例如:

http://azetaline.com/zhilingchuli/343.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有