C语言-补充

这里会介绍一些使用C语言时的必要部分,这部分内容在外教课没有讲过,但是在实际开发中会使用到。

1.预处理指令
1.1. 概述
预处理指令是以#开头的指令,它在编译之前执行,用于常量定义,文件包含等。
#include 语句在这里不再做介绍,但是需要注意如果.h的头文件是自己写的应该用””(双引号)将文件名括起来而不是使用<>(大于小于号一对)
1.2 define语句的使用
#define 语句可以用于定义常量(不带参数的宏定义),这里不再介绍该功能,这里介绍一下带参数的宏定义。
带参宏定义的一般形式为:
#define 宏名(形参表) 字符串
在字符串中含有各个形参。
如:[codesyntax lang=”c” lines=”normal”]

#define FOO(x) x*x+1

[/codesyntax]
使用时:
[codesyntax lang=”c” lines=”normal”]

int x=1,k;
k=FOO(x); //k=x*x+1

[/codesyntax]
请注意,宏名与后面的括号之间不能有空格!
宏的定义可以有多个形参,用逗号分隔。字符串中也可以有多个语句用分号分隔。
1.3 条件编译
条件编译可以根据条件来编译代码中的不同部分,有三种形式
第一种形式的格式为:
#ifdef 标识符
程序段1
#else
程序段2
#endif
第二种形式的格式为:
#ifndef 标识符
程序段1
#else
程序段2
#endif
第三种形式的格式为:
#if 常量表达式
程序段1
#else
程序段2
#endif
第一种形式在标识符常量被定义后编译程序段1,否则编译程序段2。第二种形式则相反。第三种是进行常量表达式,如果表达式的值为真则编译程序段1,否则编译程序段2。
如果不需要else部分舍去就可以了。
2. typedef 语句
typedef定义的一般形式为:
typedef 原类型名 新类型名
typedef 用于定义新的变量类型,例如:[codesyntax lang=”c” lines=”normal”]

struct student{
int id;
int gender;
char name[10];
}
typedef struct student STU;

[/codesyntax]之后的STU类型就会被处理为struct student。
也可以将两句合并。[codesyntax lang=”c” lines=”normal”]

typedef struct student{
int id;
int gender;
char name[10];
}STU;

[/codesyntax]
这部分代码和以上效果相同,但是这里的代码相当于声明了两个类型 STU 和 struct student。这里可以将student省略。
3. 位运算符
在单片机或DSP或ARM等开发时会运用到位运算符,位运算是进行二进制位按位运算的操作符。
C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移 >> 右移
进行为运算时需要对数据类型的大小有一定的认识,通常进行运算的都是16进制。
4. 其他
4.1 循环的生成
dsp或者单片机的开发通常会进入循环,用while(1)语句来实现不断的输出。有时也会使用for(;;);来阻止程序退出main函数。
4.2 汇编代码的嵌入
如非必要,可以不使用汇编代码,但是如果必须使用可以用以下方法实现
对于使用CCS的DSP开发:[codesyntax lang=”c” lines=”normal”]

asm("nop");

[/codesyntax]
对于VC:[codesyntax lang=”c” lines=”normal”]

__asm{
nop
};

[/codesyntax]
对于GCC:[codesyntax lang=”c” lines=”normal”]

__asm__("nop");

[/codesyntax]
对于汇编指令的简介这里不进行讲述,根据平台的不同而不同。