#pragma message预编译指令使用技巧

#pragma message预编译指令使用技巧
(hangwire发表于2003-2-20 13:26:58)

一般情况下,#pragma message( messagestring )是在编译期间,将一个文字串(messagestring)发送到标准输出窗口。典型的使用方法是在编译时报告和显示信息。下面的代码段是编译期间在标准输出窗口显示一条消息:

#if _M_IX86 == 500
#pragma message( "Pentium processor build" )
#endif

messagestring 参数可以将文字串常量扩展成一个宏,从而可以显示任何形式的字符串。例如,下面的语句显示被编译文件的名字以及文件被最后一次修改的日期和时间:

#pragma message( "Compiling " __FILE__ )
#pragma message( "Last modified on " __TIMESTAMP__ )
#pragma message("Remember to write some actual code in this sample app!!"))

下面我们就利用这个特性,进一步扩展#pragma message的使用。先在一个头文件(假设为lfpragma.h)中定义下面的宏:

#define PTODO_LINENUMBER_TO_STRING(x) #x
#define PTODO_LINENUMBER(x) PTODO_LINENUMBER_TO_STRING(x)
#define INCLUDE_FILE_AND_LINE(string) __FILE__"(" PTODO_LINENUMBER(__LINE__) "): "string

然后在任何cpp文件中包含lfpragma.h文件,那么我们就可以象下面这样引用前面定义的宏。如:

#pragma message( INCLUDE_FILE_AND_LINE("Compiling ") __FILE__ )
#pragma message( INCLUDE_FILE_AND_LINE("Last modified on ") __TIMESTAMP__ )
#pragma message(INCLUDE_FILE_AND_LINE("Remember to write some actual code in this sample app!!"))

这样使用#pragma message与通常使用的方法有什么不同呢?平常我们使用#pragma message时,在标准输出窗口中可以看见#pragma message的输出信息,但是鼠标点右键弹出的上下文菜单中“Go to Error/Tag”菜单项是置灰的,不可用。但是如果使用上面定义的宏,我们就可以激活上下文菜单中“Go to Error/Tag”,从而定位到相应的代码行。

如需要例子代码,请发邮件到 hangwire@sina.com 索取。
 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`#pragma` 的使用方法如下: ```c++ #pragma 指令名 [指令参数] ``` 其中,`指令名` 表示要执行的 `#pragma` 指令的名称,可以是编译器提供的预定义指令,也可以是用户自定义的指令;而 `指令参数` 则是指令的参数,不同的指令可以接受不同的参数。 下面以 `#pragma once` 和 `#pragma pack` 为例,介绍 `#pragma` 的具体使用方法。 1. 防止头文件被重复包含 `#pragma once` 可以用于防止头文件被重复包含。例如,我们有一个头文件 `my_header.h`,内容如下: ```c++ #ifndef MY_HEADER_H #define MY_HEADER_H // 头文件内容 #endif ``` 这是常见的防止头文件被重复包含的写法。但其实还有一种更加简单的方式,就是使用 `#pragma once` 指令。只需要在头文件的开头加上一行 `#pragma once`,就可以达到同样的效果,如下所示: ```c++ #pragma once // 头文件内容 ``` 2. 控制结构体字节对齐方式 `#pragma pack` 可以控制结构体的字节对齐方式。例如,我们有一个结构体 `MyStruct`,定义如下: ```c++ struct MyStruct { char a; int b; short c; }; ``` 默认情况下,编译器会按照“自然对齐”的方式来对结构体进行字节对齐,即按照结构体成员的大小和类型自动调整对齐方式。但是,如果我们希望手动控制结构体的字节对齐方式,可以使用 `#pragma pack` 指令。例如,我们希望将结构体 `MyStruct` 的字节对齐方式设置为 1,可以这样写: ```c++ #pragma pack(1) struct MyStruct { char a; int b; short c; }; ``` 这样,编译器就会按照 1 字节的对齐方式来对结构体进行字节对齐。注意,使用 `#pragma pack` 指令可能会影响程序的性能和可移植性,应该谨慎使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值