• BCB6中的#Pragma说明<转>


    1.#pragma alignment
           alignment pragma用于显示一条当前内存对齐(alignment)和枚举(enum)字节大小的消息。例如:
    W8035: The alignment is 8 bytes, the enum size is 4 bytes
    该消息必须在打开编译器选项“show general messages”或编译器开关“-wmsg”后才能显示。
    2.#pragma anon_struct
           #pragma anon_struct on        允许编译类中内嵌的匿名结构
    #pragma anon_struct off              禁止编译类中内嵌的匿名结构
    例如:
    #pragma anon_struct on
    struct S
    {
        int i;
        struct                          // Embedded anonymous struct
    {                       
               int  j ;
              float x ;
        };
    S() { i = 1; }
    };
    #pragma anon_struct off
    3.#pragma argsused
           argsused pragma通常在定义一个函数前使用,用于屏蔽函数参数未使用的警告。例如:
    #pragma   argsused
           int func(int a,int b)
    {
           ++b;
           return b;
    }
    如果不使用该pragma,编译器就会报类似“函数参数没有用到”的警告消息。
    4.#pragma checkoption optionstring
           checkoption pragma检查optionstring中包含的选项是否已设置。例如:
    #pragma checkoption -a4 –b
    如果没有设置,显示一个错误:E2471: pragma checkoption failed: options are not as expected。
    5.#pragma codeseg
    #pragma codeseg <seg_name> <"seg_class"> <group>
    codeseg pragma用于重命名函数代码所在的段(segment)、类(class)、组(group)。如果codeseg后没有任何选项,表示使用缺省代码段。
    6.#pragma comment
    #pragma comment (comment type, "string")
    comment pragma用于将一个comment记录写入到输出文件。Comment类型可以下列值之一:
    exestr      编译器将string写入到一个.obj文件中,最终放置到可执行文件中。使用文件搜索工具可以从可执行文件中找到该string。
    lib           连接器将一个string中指定的.lib文件写入到一个.obj文件中。
    user        编译器将string写入到一个.obj文件中,但连接器忽略,就是说最终string不放置到可执行文件中。
    7.#pragma defineonoption and #pragma undefineonoption
           #pragma defineonoption name switch(es)
    #pragma undefineonoption name switch(es)
    这两个pragma用于为若干个命令行开关建立一个别名(name)。除了部分负责输入的命令行开关(如-I、-L)外,大部分命令开关都可以在这两个指示符中使用。
    #pragma defineonoption在别名中所有指定开关都已打开的情况下定义name。
    #pragma undefineonoption在别名中所有指定开关都已打开的情况下不定义name。
     
    例如,myfile.c文件包含下列代码:
    #pragma defineonoption OPTIMIZING -O2
    #ifdef    OPTIMIZING
    #pragma message We are optimizing with -O2
    #else
    #pragma message There are no optimizations turned on
    #endif
     
    bcc32 -c myfile.c,输出是There are no optimizations turned on
    bcc32 -c -O2 myfile.c,输出是We are optimizing with -O2
     
    下面是一个同时使用多个命令行开关的实例:
    #define SWITCHES_ARE_OFF
    #pragma undefineonoption SWITCHES_ARE_OFF -O2 -c -P -C
    #ifdef    SWITCHES_ARE_OFF
    #pragma message At least one of the switches is not turned on
    #else
    #pragma message All switches are turned on
    #endif
     
    bcc32 -c myfile.c,输出是At least one of the switches is not turned on
    bcc32 -c -P -O2 -C,输出是All switches are turned on
    8.  #pragma exit and #pragma startup
           #pragma startup function-name <priority>
    #pragma exit function-name <priority>
    这两个pragma分别用于指定在main函数调用前调用和在_exit函数调用前调用的函数。函数定义格式如下:
    void func(void);
    priority参数数值范围为64-255,0值级别最高。级别越高,在main函数调用前越早调用,在-exit函数调用前越晚调用。缺省级别为100。0-63级别C库保留使用。
    9.#pragma hdrfile
           #pragma hdrfile "filename.CSM"
           hdrfile pragma用于指定预编译头文件的名称。前提是必须已启用预编译头文件功能。

    10.#pragma hdrstop
    #pragma hdrstop
    hdrstop pragma用于终止若干个头文件的预编译,可有效减少预编译头文件占用的磁盘空间。
    凡在源文件中#pragma hdrstop指令之前被引用的头文件都将被预编译成预编译头文件。假如一个头文件同时被多个源文件引用,那么生成的预编译头文件同样可被多个源文件共享。因此,在工程中#pragma hdrstop指令之前包含通用头文件可获得更好的编译性能。
    例如,一个新应用程序创建后,源文件“Unit1.cpp”都会包含类似内容:
    #include <vcl.h>       // common header file
    #pragma hdrstop       // terminate list here
    #include "Unit1.h"       // specific header file
    #pragma hdrstop指令只能在源文件中使用,头文件中使用没有任何效果。
     
    11.#pragma inline
    #pragma inline
    该指令等同于“-B”命令行选项。.
    #pragma inline指令最好放在源文件的顶部,因为编译器每次遇到#pragma inline指令都会加上“-B”命令行选项重新编译该文件。
    12.#pragma intrinsic
    #pragma intrinsic [-]function-name
    #pragma intrinsic用于重写控制函数内联的命令行开关或IDE选项。
    内联一个指定的函数前必须包含该函数的原型。
    例如:
    #pragma intrinsic strcpy
    编译器将在调用strcpy函数的函数内产生strcpy函数实现代码。
    #pragma intrinsic –strcpy
    阻止编译器对strcpy内联。
    13.#pragma link
    #pragma link “[path]modulename[.ext]”
    该指令命令连接器将一个文件连接到可执行文件中。缺省情况下,连接器缺省在本地路径下查找modulename文件,modulename文件后缀为“.obj”。使用命令行选项“-L”或者path参数指定任意路径。
    14.#pragma message
    #pragma message ("text" ["text"["text" ...]])
    #pragma message text
    #pragma message (text)
    使用这三个指令用于在程序代码中显示自定义的消息。
    第一个指令用于输出一个消息,其中的宏不被展开。
    第二个指令用于输出一个包含宏的消息,其中的宏将被展开。
    第三个指令用于展开并输出一个已定义的宏。如果宏未被定义,将输出一个该指令无效的消息。
    例如:
    #ifdef __BORLANDC__
    #pragma message you are compiling using version __BORLANDC__ of C++Builder.
    #else
    #pragma message “sorry,you are not using C++Builder compiler.”
    #endif
    14.#pragma obsolete
    #pragma obsolete identifier
    凡是在程序代码中该指令后遇到identifier标识符,预编译器将第一时间给出一个警告信息。警告显示该标识符已作废。
    15.#pragma option
           #pragma option options
    #pragma option push options
    #pragma option pop
    #pragma nopushoptwarn
    使用#pragma option指令用于在程序代码中包含命令行选项。#pragma option指令也可以附加push 和 pop参数后使用。
    大部分命令行选项都可以作为options参数使用。options参数允许同时包含多个命令行选项。例如:
    #pragma option -C
    #pragma option -C –A
    使用#pragma option push指令可以保存当前所有的命令行选项。#pragma option pop指令和#pragma option push指令配对使用,用于恢复以前保存的命令行选项。例如:
    #pragma option push
    #include <theworld.h>
    #pragma option pop
    #include “ystuff.h”
    下面的实例因push和pop指令未配对使用,将会产生一个空栈警告。
    #pragma option push
    #pragma option pop
    #pragma option pop      /* Warning */
    通过#pragma warn –nop指令可以关闭这个警告。
    有一点必须特别注意,必须保证每个文件中的#pragma option push和#pragma option pop指令配对使用。如果在文件结尾和文件开始时的命令行选项堆栈内容不一致,将会显示一个警告:“以前的选项和警告没有恢复?”。
    通过#pragma nopushoptwarn.指令关闭这个警告。
    16.#pragma pack
    #pragma pack([{push | pop}[,]] [identifier[,]] [n])
    #pragma pack(n)指令和#pragma option –an指令的作用是一样的。n表示编译器在内存中排列数据的字节对齐方式。
    #pragma pack()表示选择编译器缺省的字节对齐方式,缺省为8字节。
    #pragma pack(n)表示选择n值作为字节对齐方式。n可以为1,2,4,8和16。
    #pragma pack(push) 表示压入当前字节对齐方式。
    #pragma pack(push, ident) 表示关联标识符ident后压入当前字节对齐方式。
    #pragma pack(push, n) 表示压入当前字节对齐方式,选择n值作为字节对齐方式。
    #pragma pack(push, ident, n) 表示关联标识符ident后压入当前字节对齐方式,选择n值作为字节对齐方式。
    #pragma pack(pop) 表示弹出最后压入的字节对齐方式。
    #pragma pack(pop, ident) 表示弹出关联标识符ident的字节对齐方式。如果没有找到该标识符,选择缺省字节对齐方式。
    #pragma pack(pop,n) 表示弹出n值大小的字节对齐方式。如果没有找到匹配的内容,选择缺省字节对齐方式。
    #pragma pack(pop, ident,n) 表示弹出关联标识符ident的n值大小的字节对齐方式。如果没有找到匹配的内容,选择缺省字节对齐方式。
    #pragma pop指令必须和#pragma push指令配对使用。

    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    轻量级通用上采样算子-CARAFE
    图像分割-Mask Scoring R-CNN
    对C#Chart控件使用整理
    C#中的三种timer
    C#的三大难点
    将Excel的数据导入DataGridView中(转)
    状态者设计模式
    C# 中 DataTable 使用详解。
    Excel连接字符串在.NET中的应用
    状态机设计思想
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2223185.html
Copyright © 2020-2023  润新知