c语言中编译预处理命令,C语言之预处理命令

C语言文件包含与头文件写法

C语言文件包含的处理方法:

(1)处理时间:

(#include)预处理阶段

(2)处理方法:在预处理阶段,系统自动对#include命令进行处理。具体做法是:将包含文件的内容复制到包含语句(#include)处,得到新的文件,然后对新的文件进行编译。

一般情况下包含文件分为两种:包含.h 文件和包含.c文件包含.c文件的编译和编译多文件程序(包含.h的文件就是如此) 是不同的

例子:

#include

//#include "fun.c"

int main()

{

int a = , b = ; c = a; sun(a, b);

printf("\r\n c = %d\r\n", c);

return ;

}

/*end of file1*/ [cpp] view plaincopy

[cpp] view plaincopy

/*file2: fun.c*/

int c = ;

void sun(int a, int b)

{

printf("\r\n a + b = %d\r\n", a+b);

[cpp] view plaincopy c = ;

printf("\r\nc = %d\r\n", c);

}

再来一个包含.h的头文件吧

#include "stm32f10x.h"

#include "bsp_led.h"

void Delay(__IO u32 nCount);

int main(void)

{

LED_GPIO_Config();

while ()

{

LED1( OFF );

Delay(0x0FFFFF*);

LED1( ON );

Delay(0x0FFFFF*);

}

}

void Delay(__IO uint32_t nCount) //简单延时代码

{

for(; nCount != ; nCount--);

}

三:条件编译

一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。条件编译语句排版时,需考虑以下三种位置:

1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中);

2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中);

3)条件编译语句嵌套在函数体内 (主要在(.c)文件中)。条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

指令编辑

条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。

#if、#else、#elif和#endif指令

一般形式有如下几种

(1)

#if 表达式

// 语句段1

[#else

// 语句段2]

#endif

如果表达式为真,就编译语句段1,否则编译语句段2[1]

(2)

#if 表达式1

// 语句段1

#elif 表达式2

// 语句段2

#else

// 语句段3

#endif

如果表达式1真,则编译语句段1,否则判断表达式2;如果表达式2为真,则编译语句段2,否则编译语句段3

#ifdef和#ifndef

(1)#ifdef的一般形式:[1]

#ifdef 宏名 // 语句段 #endif

作用:如果在此之前已定义了这样的宏名,则编译语句段。

(2)#ifndef的一般形式:[1]

#ifndef 宏名 // 语句段 #endif

作用:如果在此之前没有定义这样的宏名,则编译语句段。

#else可以用于#ifdef和#ifndef中,但#elif不可以。

#error

指令将使编译器显示一条错误信息,然后停止编译。

#line

指令可以改变编译器用来指出警告和错误信息的文件号和行号。

#pragma

指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。

举例

#include

#define LETTER 1

int main( int argc, char * argv[] )

{

char str[]="C Language",c;

int i;

i=;

while( (c=str[i]) != '\0' )

{

i++;

#if LETTER

if( c>='a' && c<='z' )

c=c-;

#else

if( c>='A' && c<='Z' )

c=c+;

#endif

printf( "%c",c );

}

return ;

}

运行结果为C LANGUAGE

常用预处理命令

#空指令,无任何效果

#include包含一个源代码文件

#define定义宏

#undef取消已定义的宏

#if如果给定条件为真,则编译下面代码

#ifdef如果宏已经定义,则编译下面代码

#ifndef如果宏没有定义,则编译下面代码

#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

#endif结束一个#if……#else条件编译块

#error停止编译并显示错误信息

b0e46ab7b4f6c4a2bdf0fc648a1f483c.png

欢迎大家一起交流 ,分享程序员励志故事。   幸福的程序员 QQ群:160441098

f66c0f1731ea37ab0d963871d912ce3a.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值