一般情况下,#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”,从而定位到相应的代码行


pragma message是用来告诉程序员,程序在编译时期的信息。而outputdebugstr则是告诉程序员,程序在运行时期的信息。

下面就以一个例子来讲解pragma message。

配合#if/#ifdef/#ifndef设置编译时的提示信息,例如: 
//test.cpp

#define UNICODE

#ifdef UNICODE 
#pragma message("使用UNICODE字符集") 
#else 
#pragma message("使用ANSI字符集") 
#endif

int main() 

return 0; 
}

#pragma message的作用的更多相关文章

  1. pragma message任务

    pragma message它是用来告诉程序猿,在编译的程序信息.和outputdebugstr则是告诉程序猿.程序在执行时期的信息. 以下就以一个样例来解说pragma message. 配合#if ...

  2. pragma

    在所有的预处理指令中,#pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个 编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  3. 【C语言】pragma

    ① #pragma comment (lib, "libgsl.a") 这是告诉编译器在编译形成的.obj文件和.exe文件中加一条信息,使得 链接器在链接库的时候要去找libgs ...

  4. #pragma 的使用

    #pragma 的使用 尽管 C 和 C++ 都已经有标准,但是几乎每个编译器 (广义,包含连接器等) 扩展一些 C/C++ 关键字. 合理地应用这些关键字,有时候能使我们的工作非常方便.下面随便说说 ...

  5. 聊聊 #pragma 和 // MARK:

    我去,就这两个东西还要讲?是OC或Swift开发人员都知道是怎么回事好吗?不就是用来标记和分组代码的吗?难道还有别的装逼技能? 当然,其实问大部分人说这两个是什么作用,或者是除了这两个还知道什么的情况 ...

  6. C++ #pragma 预处理指令

    #pragma 预编译指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征 ...

  7. C语言#pragma预处理

    在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma 指令对每个编译器给出了一个方法,在保持与C 和C ++语言完全 ...

  8. 预处理指令中#Pragma

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  9. #pragma的用法

    在所有的预处理指令中,#Pragma   指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和 C++语言完全 ...

随机推荐

  1. 用宏 x y z,找出最大值最小值

    #define max(x,y,z) ((x)>(y)?(x):(y))>(z)?((x)>(y)?(x):(y)):(z) #define min(x,y,z) ((x)<( ...

  2. P1018 乘积最大

    开始定义状态f[i][j][k]为[i,j)区间插入k个括号,使用记忆化搜索,但是成功爆栈,得到4个mle #include <bits/stdc++.h> using namespace ...

  3. Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)

    网易公开课,第14, 15课 notes,10 之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的 这里介绍的是另外一种降维的方法,Principal Compo ...

  4. 运维技能大全 | Devops Tools 周期表

    老外整理的 Devops Tools 周期表,可以用酷炫屌炸天形容,划分了数据库.CI.日志.安全.监控.配置管理.云服务等15个大类,120个工具.我是有点孤陋寡闻,很多都没听说过,你要是全学会了你 ...

  5. NRF51822之GPIOTE使用

    ---恢复内容开始--- 在上篇介绍nrf51822的GPIOTE http://www.cnblogs.com/libra13179/p/5336580.html 我们现在开始下水游泳. /** @ ...

  6. UML时序图总结

    前言 在我的工作中,用的最多的就是时序图了.可能由于工作的原因,我也是最喜欢画时序图了,很清楚,很明了,什么时候发送什么消息,到达什么状态,一下子就展示在你的脑海里,对于消息驱动的程序来说,是再好不过 ...

  7. Spring整合CXF之发布WebService服务

    今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-s ...

  8. Ant学习-002-ant 执行 TestNG 测试用例时 [testng] java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException 解决方案

    上篇文章中概述了 Ant windows 环境的基本配置,此文讲述在初次使用的过程中遇到的问题. 今天通过 ant 执行 TestNG 测试用例时,执行报错,相应的错误信息如下所示: Buildfil ...

  9. 通过CSS使文本框中输入的小写字母变大写字母

    在style.css文件中写 .dataField input{text-transform:uppercase;} .dataField textarea {text-transform:upper ...

  10. debian linux 下安装 netbeans(php)

    1.安装netbians依赖jdk7 ,所以第一步是 apt-get install openjdk-7-jre 2.安装netbians  通过wget http://dlc.sun.com.edg ...