从零开始一起学C语言(八)--编译预处理

本文深入解析C语言的关键特性,包括编译预处理的作用、位运算符的应用、32个关键字的功能及模块化编程的实践。理解这些概念将帮助程序员更高效地使用C语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、编译预处理

1、作用

2、包含头文件

3、宏定义

4、条件编译

二、位运算

1、位运算符

2、写1和写0

三、32个关键字

四、模块化编程


一、编译预处理

1、作用

以#开头的命令,为编译做准备工作,筛选出需要编译的代码。

2、包含头文件

#include <stdio.h> //从系统指定的目录寻找指定的stdio.h文件。

#include “stdio.h” //在当前工程下寻找指定的stdio.h文件。

3、宏定义

#define A B

用 B 完全代替A。

不带参数:#define ONE 1

带参数:#define SUM(a,b)  a+b

int a;

a = 2*SUM(2,3); // 2*2+3

宏定义和函数的比较

宏定义:执行效率高,参数没有经过类型检验,不安全。

函数:执行效率低,参数经过类型检验,安全。

 

4、条件编译

#ifdef #ifndef #endif #else

#ifndef A

#define A

语句;

#endif   //用在.h文件中防止重复包含头文件

 

#ifdef A

语句1;

#else

语句2;

#endif  //选择编译

二、位运算

1、位运算符

& 按位与 任何数和1与的结果为本身,和0与的结果为0  。

| 按位或 任何数和1相或为为1,和0相或为本身。

^ 异或  不同为1,相同为0

~ 取反  0为1,1为0

<< 左移 所有二进制位左移若干位(左舍弃,右补0)

>> 右移 所有二进制位右移若干位(右舍弃,正数左补0,负数左补1)

 

2、写1和写0

让a的第b位写1:a |= 1<<b;

让a的第b位写0:a &= ~(1<<b);

三、32个关键字

break continue goto return

switch while for if case default else do

float void int long short char double unsigned signed

struct enum union

sizeof

static extern auto const register volatile typedef

auto 自动变量,由编译器自动开辟释放。没有修饰的局部变量。

register 寄存器变量。建议编译器把变量存放到寄存器操作。

volatile 防止编译器优化。每次都是从变量定义的位置取值。

const 只读变量(常变量)。

int const *p; // *前: p指向的变量的值不可改变。

const int *p; //*前: p指向的变量的值不可改变。

int *const p;//*后:  p 存储的地址不可改变。

typedef 重定义类型符。

typedef unsigned int u32;

#define u32 unsigned int

四、模块化编程

就是每一个模块建立一个对应的.c和.h文件。主函数要想调用该模块,只需要包含对应的.h文件就可以了。

.c 写模块的初始化和功能函数。

.h 写类型声明、函数的声明、宏定义等。标准的.h文件需要有防止重复编译的编译预处理命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值