C语言编程小知识分享,希望对你有用

发布于:2022-11-05 ⋅ 阅读:(272) ⋅ 点赞:(0)

 

在LPC2200系列中:

可以通过过下面的程序延迟10毫秒:

for(i=0;i<200;i++)

{

for(j=0;j<200;j++);

}

通过下面语句将一个16位的变量放在两个8位的变量中。

//IP数据报总长度高字节

IpHeadUint8[10]=(IpHead.e_ip.Crc&0xff00)>>8;

//IP数据报总长度低字节

IpHeadUint8[11]=IpHead.e_ip.Crc&0x00ff;

在对全部数组元素赋初值时,可以不指定数组长度。

eg;inta={1,2,3,4,5};

但如果当输出第a[5]以上的元素时,系统回输出随机数值,所以使用此方法时,不能使用超过初始值元素以上的元素。

用或运算,可使某位置为1,其它位不变

eg: PINSEL0 |= 0x00000005; //设置串口引脚

使第0位和第二位置一,其他位不变。

C语言符号优先级:

1>复合赋值运算符号:

a+=3*5;

等价于a=a+(3*5);

关键字volatile的用法

volatile变量可能用于如下几种情况:

1>设备的硬件寄存器(如:状态寄存器)

2>一个中断服务子程序中会访问到的全局变量

3>多线程应用中被几个任务共享的变量。


调试相关的宏

在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序行。具体宏如下:

__FILE__ 当前程序源文件 (char*)
__FUNCTION__ 当前运行的函数 (char*)
__LINE__ 当前的函数行 (int)

这些宏不是程序代码定义的,而是有编译器产生的。这些信息都是在编译器处理文件的时候动态产生的。

# 字符串化操作符

在gcc的编译系统中,可以使用#将当前的内容转换成字符串。程序示例:

#include <stdio.h>

#define DPRINT(expr) printf("<main>%s = %d\n", #expr, expr);

int main(void)
{
int x = 3;
int y = 5;

DPRINT(x / y);
DPRINT(x + y);
DPRINT(x * y);

return 0;
}

执行结果:

deng@itcast:~/tmp$ gcc test.c
deng@itcast:~/tmp$ ./a.out
<main>x / y = 0
<main>x + y = 8
<main>x * y = 15

#expr表示根据宏中的参数(即表达式的内容),生成一个字符串。该过程同样是有编译器产生的,编译器在编译源文件的时候,如果遇到了类似的宏,会自动根据程序中表达式的内容,生成一个字符串的宏。


关键字

关键字是C语言中具有特殊功能的保留标示符,按照功能可分为

1). 数据类型(常用char, short, int, long, unsigned, float, double)

2). 运算和表达式( =, +, -, *, while, do-while, if, goto, switch-case)

3). 数据存储(auto, static, extern,const, register,volatile,restricted),

4). 结构(struct, enum, union,typedef),

5). 位操作和逻辑运算(<<, >>, &, |, ~,^, &&),

6). 预处理(#define, #include, #error,#if...#elif...#else...#endif等),

7). 平台扩展关键字(__asm, __inline,__syscall)

这些关键字共同构成了嵌入式平台的C语法。

(以上图片及文字均来源于网络,如有侵权,联系删除)


网站公告

今日签到

点亮在社区的每一天
去签到