Linux C中的一些关键字

1、宏定义:#

(1)包含的宏:#include 在预处理阶段,将包含的头文件加载进来

#include <xx.h> 在默认路径下查找

#include "xx.h"   现在当前路径下查找,如果没有再到默认路径下查找

(2)常量替换的宏:#define

#define MONTH 12将12用MONTH替换,常用于代码中重复出现12,若要修改成13或其他数字,只需将#define MONTH 13 就能实现批次修改

#define LED1 P1^1 将引脚p1.1用其他字符代替,方便理解

(3)条件编译的宏:

#if xxx if后面的条件成立,则执行if到else之间的代码

#else 否则执行else到endif之间得代码

#endif

#define xxxx

#ifdef xxxx 如果定义了宏xxxx,则执行ifdef到endif之间的代码

#endif

#ifndef xxxx 如果没有定义宏xxxx,则执行ifndef到endif之间的代码,常用于头文件,避免重复编译

#endif

(4)复合语句的宏(实现一些不太复杂的函数功能):

#define MAX(x,y)   x>y?x:y求两数字最大值

#define MUL(X,Y)   x*y求两数之积

2、静态修饰static:可以修饰变量和函数(在源文件中未用static修饰的全局变量和函数都是全局可见的,可以在其他文件中调用,也带来命名不可重复的问题)

(1)修饰变量

修饰全局变量时,该变量只能在本文件内使用,未初始化的static变量默认赋值为0

修饰局部变量时,这个变量只会初始化一次,以后用的值是上一次保存的值(函数调用结束后静态局部变量的内存空间保留)例如

int func(void)

{

int x=2;

x++;

return x;

}


int main(){

int y=0,i;

for(i=0;i<5;i++){

y+=func();

}

printf("%d\n",y);

return 0;

} //未用static修饰变量x时,输出结果为15,即每次调用函数func,x都会被重新赋值为2


int func(void)

{

staticint x=2;

x++;

return x;

}


int main(){

int y=0,i;

for(i=0;i<5;i++){

y+=func();

}

printf("%d\n",y);

return 0;

} //加了static关键字,输出结果为25,x的值只会被初始化一次,此后的值都会保留

(2)修饰函数:该函数只能在本文件内调用

3、extern(修饰变量或函数),表明该函数或变量在别的文件里定义

4、typedef(起别名)

(1)给复杂的定义赋予简单直白的别名

typedef unsigned char  U8//不同数据类型的长度跟cpu的位数有关,解决不同cpu的代码通用问题,可以用typedef

typedef unsignedint  U16

(2)用在结构体struct定义中,例如

typedef  struct  data{

int age;

char name[10];

}message; *mess

5、const(常量修饰符)

(1)常量指针:const  int  *p(int const *p) 例如

int x = 2 , y = 3;; //常用于函数的传参,不允许通过指针p来修改x的值,但x值可以通过其他方式来修改,同时p也可以指向其他的值

const  int  *p = &x;//即*p = y;是不允许的,但x = y;是可以的。

(2)指针常量:int  *const p 例如

int x = 2 , y = 3; //指针p的值不可修改,是个常量,不可指向别的空间。但p指向空间的值可以修改

int *const  p = &x;//即p = &y;是不允许的,但*p = y;是可以的。

(3)指针常量指针:const  int  *const p //指针p的值不可修改,同时不允许通过指针p来修改p指向空间的值

(4)修饰常量:const  int  x = 2;

//x的值不可直接被再次赋值,但可以通过指针来修改它的值

//即x = 3; 是不可以的,但通过int * p = &x; *p = 3; 是可以的



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值