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指令配对使用。

时间: 2024-09-23 17:16:15

BCB6中的#Pragma说明<转>的相关文章

BCB6中Indy9发送邮件的例子

有两个控件:TIdMessage:IdMsgSend,TIdSMTP:SMTP /发送邮件 //注:发送的SMTP属性通过SMTP_Setup函数设置了 //参数:in:cTo,收件人 // cCc 抄送 // cBcc 暗抄 // cSubject 主题 // cBody 内容 // cAttachList 发送的附件(以\n分割) // OUT: Msg 返回错误信息 //返回值 0: 成功发送 // -1:失败,参见Msg信息 // -2: 没有先设置SMTP发送属性 int __fast

预处理指令中#Pragma

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征.依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的. 其格式一般为: #pragma Para.其中Para 为参数,下面来看一些常用的参数 1.message 参数 Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息

c++中sizeof的分析

  sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数. MSDN上的解释为: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size

C++Builder 6中开发Office程序心得(一)

一.用控件还是用OLEAutomation? 这个问题应该说很常见.我也在任何可能的情况下坚持我的主张:用BCB 6提供的Server控件组.如果你是用Delphi 6/7版本开发,那么用Delphi提供的Server控件组. 这样做有什么好处?我个人认为至少有如下两个: 第一,维护结构化+OO的程序设计风格.例如: ExcelApplication1->set_DisplayAlerts(0,false); ExcelApplication1->Quit(); 又如: int SheetCo

用BCB5的打包程序打包BCB6

当我们用BCB做好了一个程序后,下一步要做的就的打包程序,发布给用户了.单从打包程序的角度来讲,我们的选择会有很多,就BCB来说,每个版本的BCB光盘上都有一个打包程序,对于这些打包程序,我只用过BCB5的与BCB6的,别的版本没有用过,不敢乱加评论,但BCB6带的那个打包程序明显存在问题,对中文的支持也不好,这样不由的想到了是否能用BCB5的打包程序来打包?我在网上咨询过很多朋友,没有朋友能给出一个明确的答案,便自已动手来找其原理,最终成功了,但不可否认这其中我得到了很多网友的支持与提示,这里

Oracle中怎样用自治事务保存日志表

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败.在Oracle中,一个事务是从执行第一个数据治理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束. 事务的"要么全部完成,要么什么都没完成"的本性会使将错误信息记入数据库表中变得很困难,因为当事务失败重新运行时,用来编写日志条目的INSERT语句还未完成. 针对这种困境,Oracle提供了一种便捷的方法,即自治事务.自治事务从当前事务开始,在其自身的语

ORACLE中死锁的知识点总结

  死锁的概念       什么是死锁呢? 其实我们生活中也有很多类似死锁的例子. 我先举一个生活中的例子:过年回家,父亲买了一把水弹枪,儿子和侄子争抢着要先玩,谁也不让谁,拆开包装后,一个抢了枪, 一个逮住了子弹和弹夹.两个都争着要先玩,但是都互不相让.结果两个人都玩不了.如果儿子要先玩,就必须让侄子把子弹和弹夹给他,如果侄子要先玩,就必须让儿子把枪给侄子.他们就这样对峙了十几分钟,互不相让. 我出来调停,让儿子把枪先给侄子玩,每个人玩十分钟.然后两个人开开心心一起玩起来.其实这就是一个活生生

探讨php中header的用法详解_php技巧

 header() is used to send raw HTTP headers. See the HTTP/1.1 specification for more information on HTTP headers. 范例一: 复制代码 代码如下: <?PHPHeader("Location: http://www.jb51.net";); exit;//在每个重定向之后都必须加上"exit",避免发生错误后,继续执行.?> 复制代码 代码如下:

在控制台程序中隐藏控制台窗口!

大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出. 下面就介绍一下,如何隐藏win32 console application的console窗口 因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项). 首先我们来看一下linke