C语言之预处理命令
/****************************************************************************
Title:C之预处理命令
Time:2014年7月26日
**************************************************************************/
大一时学过,C语言中预处理命令功能分为3种。(宏定义,文件包含和条件编译)
一:宏定义
1 # define Pi 3.1415926 2 3 int s; 4 int r=2; 5 void main() 6 { 7 s=pi*r; 8 9 } 10 11 //功能:将程序中的Pi全部替换成3.1415926常数
另外一种是带参数的宏,C课本上后面的题目很多,唯一记住的是
![](http://images0.cnblogs.com/i/563073/201407/261636332751830.gif)
C语言文件包含与头文件写法
C语言文件包含的处理方法:
(1)处理时间:
(#include)预处理阶段
(2)处理方法:在预处理阶段,系统自动对#include命令进行处理。具体做法是:将包含文件的内容复制到包含语句(#include)处,得到新的文件,然后对新的文件进行编译。
一般情况下包含文件分为两种:包含.h 文件和包含.c文件包含.c文件的编译和编译多文件程序(包含.h的文件就是如此) 是不同的
例子:
1 #include <stdio.h> 2 //#include "fun.c" 3 int main() 4 { 5 int a = 5, b = 19; c = a; sun(a, b); 6 printf("\r\n c = %d\r\n", c); 7 return 0; 8 } 9 10 11 /*end of file1*/ [cpp] view plaincopy 12 13 [cpp] view plaincopy 14 /*file2: fun.c*/ 15 int c = 0; 16 void sun(int a, int b) 17 { 18 printf("\r\n a + b = %d\r\n", a+b); 19 [cpp] view plaincopy c = 0; 20 printf("\r\nc = %d\r\n", c); 21 }
再来一个包含.h的头文件吧
1 #include "stm32f10x.h" 2 #include "bsp_led.h" 3 4 void Delay(__IO u32 nCount); 5 6 7 int main(void) 8 { 9 10 LED_GPIO_Config(); 13 while (1) 14 { 15 LED1( OFF ); 16 Delay(0x0FFFFF*10); 17 LED1( ON ); 18 Delay(0x0FFFFF*10); 19 } 21 } 22 23 void Delay(__IO uint32_t nCount) //简单延时代码 24 { 25 for(; nCount != 0; nCount--); 26 }
三:条件编译
一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。条件编译语句排版时,需考虑以下三种位置:
1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中);
2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中);
3)条件编译语句嵌套在函数体内 (主要在(.c)文件中)。条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可根据表达式的值或某个特定宏是否被定义来确定编译条件。
指令编辑
#if、#else、#elif和#endif指令
1 #if 表达式 2 // 语句段1 3 [#else 4 // 语句段2] 5 #endif
1 #if 表达式1 2 // 语句段1 3 #elif 表达式2 4 // 语句段2 5 #else 6 // 语句段3 7 #endif
#ifdef和#ifndef
#error
#line
#pragma
举例
1 #include <stdio.h> 2 #define LETTER 1 3 int main( int argc, char * argv[] ) 4 { 5 char str[20]="C Language",c; 6 int i; 7 i=0; 8 while( (c=str[i]) != '\0' ) 9 { 10 i++; 11 #if LETTER 12 if( c>='a' && c<='z' ) 13 c=c-32; 14 #else 15 if( c>='A' && c<='Z' ) 16 c=c+32; 17 #endif 18 printf( "%c",c ); 19 } 20 return 0; 21 }
常用预处理命令
1 #空指令,无任何效果 2 #include包含一个源代码文件 3 #define定义宏 4 #undef取消已定义的宏 5 #if如果给定条件为真,则编译下面代码 6 #ifdef如果宏已经定义,则编译下面代码 7 #ifndef如果宏没有定义,则编译下面代码 8 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 9 #endif结束一个#if……#else条件编译块 10 #error停止编译并显示错误信息