一道面试题: 预处理器标识#error的目的是什么?

编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。

下面举个例子:
程序中往往有很多的预处理指令
#ifdef XXX
...
#else

#endif

当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:

#ifdef XXX
...
#error "XXX has been defined"

#else

#endif

这样,如果编译时出现错误,输出了XXX has been defined,表明宏XXX已经被定义了。

用处就是这样,是不是感觉很没有用处?

时间: 2024-10-03 02:55:38

一道面试题: 预处理器标识#error的目的是什么?的相关文章

详解C/C++预处理器 .

C/C++编译系统编译程序的过程为预处理.编译.链接.预处理器是在程序源文件被编译之前根据预处理指令对程序源文件进行处理的程序.预处理器指令以#号开头标识,末尾不包含分号.预处理命令不是C/C++语言本身的组成部分,不能直接对它们进行编译和链接.C/C++语言的一个重要功能是可以使用预处理指令和具有预处理的功能.C/C++提供的预处理功能主要有文件包含.宏替换.条件编译等.        1.文件包含       预处理指令#include用于包含头文件,有两种形式:#include <xxx.

CSS预处理器语言sass语法:学习sass语法

文章简介:其实现在的Sass已经有了两套语法规则:一个依旧是用缩进作为分隔符来区分代码块的:另一套规则和CSS一样采用了大括号({})作为分隔符.后一种语法规则又名SCSS,在Sass3之后的版本都支持这种语法规则.我们这里讨论的如无特殊说明,全指scss. 什么是sass? Sass是是一种基于ruby编写的CSS预处理器,诞生于2007年,是最早也是最成熟的一款CSS预处理器语言,它可以使用变量.嵌套.混入.继承,运算,函数等功能,使得CSS的开发,变得简单清晰可维护,同时也大大节省了设计者

nasm预处理器(3)

nasm提供一个限定符.nolist,可以包含它到一个宏定义中,这样该宏就不会在列表文件中被展开:限定符 .nolist直接放到参数后面: %macro foo 1.nolist 条件汇编 和C预处理器类似,nasm允许对一段源代码只在某特定条件满足时进行汇编: %if<condition> %elif<condition2> %else %endif %ifdef和 %ifndef 测试单行宏是否存在,在分支测试中也有类似的%elifdef和%elifndef %ifmacro测

详解C语言编程中预处理器的用法_C 语言

预处理最大的标志便是大写,虽然这不是标准,但请你在使用的时候大写,为了自己,也为了后人. 预处理器在一般看来,用得最多的还是宏,这里总结一下预处理器的用法. #include <stdio.h> #define MACRO_OF_MINE #ifdef MACRO_OF_MINE #else #endif 上述五个预处理是最常看见的,第一个代表着包含一个头文件,可以理解为没有它很多功能都无法使用,例如C语言并没有把输入输入纳入标准当中,而是使用库函数来提供,所以只有包含了stdio.h这个头文

简介C/C++预处理器的一些工作_C 语言

多么令人愉快的一个问题啊 就在被带到编译器那里之前,预处理器都会对你的源代码瞧上一瞧, 做一些格式化的工作,并执行任何你在源代码里面留给它来执行的指令. 像什么? 好吧,预处理器的指令就被叫做预处理器指令,而他们都以一个#开头. 像 #include 这样? 正确. 每一个被预处理器遇到的 # 命令都会导致在某种方式上对源代码的修改. 让我们来简单的研究研究它们,然后我们就会之后这背后都是怎么运转的了. #include 包含其他库.类.接口等的头文件.预处理器实际上就只是把整个头文件复制到你的

深入理解C预处理器_C 语言

C 预处理器不是编译器的组成部分,是编译过程中一个单独的步骤.C预处理器只是一个文本替换工具,它会指示编译器在实际编译之前完成所需的预处理. 所有的预处理器命令都是以井号(#)开头.它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始. 下表包含所有重要的预处理器指令: 指令 描述 #define 定义宏 #include 包含一个源代码文件 #undef 取消已定义的宏 #ifdef 如果宏已经定义,则返回真 #ifndef 如果宏没有定义,则返回真 #if 如果给定条件为真,则

什么是 CSS 预处理器?

就CSS本身而言,对于大多数Web前端从业人员来说就不是问题.学过CSS的人都知道,它不是一种编程语言.你可以用它开发网页样式,但是没法用它编程.换句话说,CSS基本上是设计师的工具,不是程序员的工具.在程序员的眼里,CSS是很头痛的事情,它并不像其它程序语言,比如说PHP.Javascript等等,有自己的变量.常量.条件语句以及一些编程语法,只是一行行单纯的属性描述,写起来相当的费事,而且代码难易组织和维护. 很自然的,有人就开始在想,能不能给CSS像其他程序语言一样,加入一些编程元素,让C

学习CSS预处理器:Sass和less进行对比

文章简介:使用Css预处理器唯一真正需要学习的只有语法,SASS是Ruby语言写的,但是两者的语法没有关系.不懂Ruby,照样可以使用.你需要的只是一个像CudeKit的应用来观察和编译你所撰写的文件. Less就更不用了,只需要调用一个js即可(在客户端运行),或者借助Node.js(服务器运行 什么是CSS预处理器? Css可以让你做很多事情,但它毕竟是给浏览器认的东西,对开发者来说,Css缺乏很多特性,例如变量.常量以及一些编程语法,代码难易组织和维护.这时Css预处理器就应运而生了.Cs

C#预处理器指令和字符串处理

一.C# 预处理器指令 在C#编程过程中,如果文件中的代码太长那么就不便于阅读,为此,采用C# 预处理器指令#region来处理代码.#region 是 C# 预处理器指令.#region 是一个分块预处理命令,它主要是用于编辑器代码的分块,在编译时会被自动删除. #region 使程序员可以在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码.使用#region和#endregion,将代码写在两者之间就可以了.   public void Insert(str