C语言#pragma用法详解.docx
文本预览下载声明
目录:(0)前言(1) #pragma message能够在编译信息输出窗口中输出相应的信息(2) #pragma code_seg能够设置程序中函数代码存放的代码段,开发驱动程序的时会用到(3) #pragma once若用在头文件的最开始处就能够保证头文件被编译一次(4) #pragma hdrstop表示预编译头文件到此为止(5) #pragma resource *.dfm表示把*.dfm文件中的资源加入工程(6) #pragma warning允许有选择性的修改编译器的警告消息的行为(7) #pragma comment将一个注释记录放入一个对象文件或可执行文件中(8) #pragma data_seg建立一个新的数据段并定义共享数据应用1:在DLL中定义一个共享的,有名字的数据段应用2:data_seg控制应用程序的启动次数(9)其他用法(0)前言 #Pragma 指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的, 且对于每个编译器都是不同的。其格式一般为: #Pragma Para 其中Para为参数,下面来看一些常用的参数。(1) #Pragma message参数能够在编译信息输出窗口中输出相应的信息这对于源代码信息的控制是非常重要的。其使用方法为: Pragma message(“消息文本”) 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef _X86 #pragma message(“_X86 macro activated!”) #endif若定义了_X86,程序编译时就会在显示“_X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。(2) #pragma code_seg能够设置程序中函数代码存放的代码段,开发驱动程序的时候就会使用到它。格式如下: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ][ segment-name [, segment-class ] ])该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序 ,如果code_seg没有带参数的话,则函数在OBJ文件中存放在默认在.text节中。 push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名 identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 segment-name (可选参数) 表示函数存放的节名例如: //默认情况下,函数被存放在.text节中void func1() { // stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(.my_data1)void func2() { // stored in my_data1 } //r1为标识符,将函数放入.my_data2节中 #pragma code_seg(push, r1, .my_data2)void func3() { // stored in my_data2 }int main() {} (3)#pragma once (比较常用)若用在头文件的最开始处就能够保证头文件被编译一次.一般在整个工程中我们只要包含头文件一次就够了,若多个.c/.cpp文件中都要包含同一个头文件,比如Windows.h,那很多声明等等岂不是有两次了?解决这个问题的传统的方法是在头
显示全部