#error和#progma && 宏定义换行符“\”

来源:互联网 发布:免费 流程图制作软件 编辑:程序博客网 时间:2024/06/05 02:08

(1),#error

      编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。下面举个例子:程序中往往有很多的预处理指令
#ifdef XXX
...
#else
...
#endif
      当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:
#ifdef XXX
...
#error "XXX has been defined"
#else
...
#endif
这样如果编译时出现错误,输出了XXX has been defined,表明宏XXX已经被定义了。这个功能同样可被用来作编译时错误出口警示。

(2),#progma

      一句话,#pragma就是为了让编译器编译出的C或C++程序与机器硬件和操作系统保持完全兼容而定义的宏扩展,#pragma是和特定编译器相关的。
一、#Pragma说明(Directives)
      C和C++程序的每次执行都支持其所在的主机或操作系统所具有的一些独特的特点。一些程序例如,需要精确控制数据存放的内存区域或控制某个函数接收的参数。#pragma指示为编译器提供了一种在不同机器和操作系统上编译以保持C和C++完全兼容的方法。#Pragma是由机器和相关的操作系统定义的,通常对每个编译器来说是不同的。
二、语法(Syntax)
      #pragma token-string(特征字符串),特征字符串是一连串的字符,就是要给一个特定编译器提供说明和编译意见。符号(#)必须是pragma所在那一行的第一个非空格字符;#号和pragma之间可以有任意个空格符。在#pragma之后,是可以被编译器解析的预处理特征字符。一般认为,#pragma属于宏扩展。如果编译器发现不认识的pragma,会提出警告,但继续编译下去。Pragmas可以用在条件声明上,提供最新的功能性的预处理程序,或者提供给编译器定义执行的信息。

 =======================================================================================================

          宏定义换行符“\”是我们见的较多的用法,但是在注释上很多人容易出错。比如

#define A (100 * \   /*note1*/           200       /*note2*/
编译器就会提示报错,如果改成:

#define A (100 *   /*note1*/ \          200      /*note2*/

就是正确的。
        另外这个换行符在MK文件中也有使用,注意以下几点:

App_PACKAGES := \    FMRadio \    librdafm \    PicoTts \    UserDictionaryProvider \    FileManager \    superuser \\    MatvPlayer #    XiaoMi \#    HTMLViewer \#    VoiceDialer \

A,屏蔽某行用#放在行首

B,每行末尾要加反斜杠,就算是空行也要加,否则会编译出错。

参考原文:http://bbs.csdn.net/topics/330103717

原创粉丝点击