当我们写完一个程序之后,信心满满地拍下F5。电脑首先会将我们编写的程序编译成它所搭载的芯片所能认识的汇编语言,而后再通过给不同的元件输入或输出高电平、低电平来实现我们程序中所写的功能。而那些不同由I/O口的高电平、低电平所构成的一长串由我们抽象而来的1、0串,则是对机器来说最简单易懂,接近本质的语言,我们称之为——机器语言。
C语言内置的一些预定义符号:
__FILE__ //进行编译的源文件所在的地址
__LINE__ //文件当前的行号
__DATE__ //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ //如果编译器遵循C语言标准,其值为1,否则未定义
#define
这是一个功能强大的预处理指令,它可以用来定义标识符,定义宏...
只要你胆子大,你甚至可以在用#define定义一堆东西之后,使用中文来完成编程!白话文不过瘾的话,还可以用文言文——前提是你有这么高的文言文造诣。
同样的,#define也是一个有些鸡肋的东西,它的很多功能实际上有更好的,且没有歧义的替代。
就比如:
#define可以定义一些简单的“函数”并且这些“函数”可以绕过C语言那令人头疼的类型检查——至少看起来是这样的——很遗憾,那只是看起来。#define所做的只是给你那些简单的逻辑起了一个‘别号’,当你在程序中写下这个‘别号’时,计算机只是拙劣地将这个逻辑粘贴了过来。
#define sum(a,b) a + b //1 c = sum(1,2) * 2; //2 c = (1 + 2) * 2;
你以为它的答案是 6 吗?不,它不是,它的答案是 5 。它只是一个拙劣地粘贴。
//3 c = 1 + 2 * 2
#define与函数最大地差异便在此体现了。
#undef
如果说#define是一个开始,那么#undef便是它的终结。
骚话就说到这里,这意思表达的已经足够明显了吧?
#if #endif
这是一个我个人感觉比注释还好用的一个条件编译。
当#if的判断条件为1的时候,执行其下的指令,直至#endif为止。
通过更改一个宏的值,轻轻松松决定了某块代码的编译与否,这可比ctrl+k+c以及ctrl+k+u舒服方便多了。至少我现在是如此感觉的。



