C语言语法约定

1
第一章:预处理指令
使用预处理器是编程的一部分,能够将相应的头文件引入文件,
使用其中的函数、类型定义以及预处理宏,下面逐一介绍:
1、include指令——文件包含
说明:该指令能够将程序所需的头文件引入程序源文件,是比较
经常使用的指令;
格式:
(一)系统头文件:#include<头文件>
(二)我的头文件:#include"头文件"
注:C语言的对应头文件是“stdio.h”
2、define指令——宏
说明:该指令能够为程序的某个部分提供能够替换的符号。
格式:
(一)带参数的宏:
#define(参数1,参数2,......,参数n)替换域
注意:
(1)替换域中的参数要带括号;
(2)替换域中要参数替换的部分用参数名替换;
(二)不带参数的宏
#define替换域
3、if指令——条件
2
说明:用于执行条件编译,当条件成立时则执行语句。
格式:
#if条件
语句
#endif
4、ifdef指令——检查宏是否已定义
说明:若是宏已定义,则执行语句。
格式:
#ifdef宏
语句
#endif
5、ifndef指令——检查宏是否未定义
若是宏未定义,则执行语句。
格式:
#ifndef宏
语句
#endif
6、else指令——选择
说明:在if失败时执行语句,属于if块。
格式:
#else
语句
3
7、elif指令
说明:等价于elseif语句,当表达式为True时执行语句,属
于if块。
格式:
#elif表达式
语句
8、undef指令
说明:取消宏定义
格式:#undef已定义的宏
9、line指令
说明:改变_LINE_和_FILE_的内容,主要用于调试或其余特殊应
用。
格式:#linenumber["filename"]
10、error指令
说明:该指令主要用于调试,它强迫编译器编译终止,并经过预
处理器发出一条错误信息
格式:#error"文本"
11、endef指令
说明:结束条件编译
12、pragma指令
说明:向编译程序传送命令
参数:
4
(一)Message参数
说明:向编译输出口传送文本信息
格式:
#pragmamessage("文本")
(二)code_seg参数
说明:它可以设置程序函数代码存放的代码段,当咱们开发驱动
程序时就要用到它。
格式:
#pragmacode_seg(["section-name"["section-class"]])
(三)once参数
说明:只要在头文件里加入这条指令,就能够确保头文件只编译
一次,这条指令实际上在VC6就已经有了,但考虑到兼容性并无太
多使用它。
格式:#pragmaonce
(四)hdrstop参数
说明:表示预编译头文件到此为止。
格式:#pragmahdrstop
(五)resource参数
说明:将*.dfm文件中的资源加入该工程;
格式:#pragmaresource"*.dfm"
(六)comment参数
说明:该指令将一个注释记录放入一个对象文件或可执行文件
5
中,经常使用的lib关键字,能够帮咱们连入一个库文件。
格式:#pragmacomment(...)
(七)warning参数
说明:警告参数;
格式:#pragmawarning(格式参数1:错误号,格式参数2:错
误号,...,格式参数n:错误号)
格式参数:
(1)disable:不显示
(2)Once:只显示一次
(3)Error:把警告信息做为一条错误信息
此外,warning还支持如下格式:
(1)#pragmawarning(Push,n)
注意:N表明警告的等级(1-4)。
说明:保存全部警告信息的警告状态,并把警告级别设定为n。
(2)#pragmawarning(POP)
说明:从栈中弹出一个警告信息,在入栈和出栈之间的一切改动
取消。
(3)#pragmawarning(Push)
说明:保存全部警告信息的警告状态。
(八)pack参数
说明:指定结构体的对齐方式,该指令来设定变量以n字节对齐
方式。
6
注意:
(1)若是n大于该变量所占用的字节数,那么偏移量以知足默认
的对齐方式;
(2)若是n小于该变量所占用的字节数,偏移量为n的倍数,不
用知足默认的对齐方式;
(3)结构体:若是n大于全部成员类型的所占用的字节数,那么,
结构体的总大小必须为占用空间量大的变量占用空间的空间数的倍
数,不然为n的倍数。
支持如下格式:
(1)#pragmapack(push)
说明:保存对齐方式。
(2)#pragmapack(pop)
说明:恢复对齐方式。
第二章:基本数据类型
C语言提供了多种基本类型,他们以下表所示:
类型 说明
int 整型
float 单精度浮点型
double 双精度浮点型
char 字符串
提供了如下变量修饰符:
?Const:
7
?首先须要注意的是,const修饰的是在它前面的类型,若是它前
面没有类型,那它修饰的是紧跟着它的那个类型
?用于参数列表,一般修饰的是指针类型,代表该函数不会试图对
传入的地址进行写操做。
?做用:限定一个变量不容许被改变。
?Static:
?当static用于修饰全局变量声明时,它表示该变量具备文件做用
域,只能被该源文件的代码引用,不能被其余源文件中的代码访

?当static用于修饰局部变量声明时,它表示该变量不是分配在该
函数的活动记录中,而是分配在全局的数据段(或bss段)中。简
单的说,就是被static修饰的局部变量实际上并非局部变量,
而是具备函数做用域的全局变量,除了只能在定义它的函数内访
问外(这是由C语法决定的),它的运行时特征和全局变量彻底一
样,函数返回不会影响它的状态,它的初始化仅有一次,发生在
程序的装载时,而不是在每次函数调用的时候初始化。
?Volatile:告诉优化器不能优化这个变量的读写操做,必定要为这
个变量的读写操做生成代码。
?Auto:函数初始和局部类型的默认存储类型,在函数调用时被分配
到栈上,在函数返回时释放存储空间。
?Extern:置于变量或者函数前,以表示变量或者函数的定义在别的
文件中,提示编译器遇到此变量和函数时在其余模块中寻找其定
8
义。另外,extern也可用来进行连接指定。
?Register:暗示编译程序相应的变量将被频繁地使用,若是可能的
话,应将其保存在CPU的寄存器中,以加快其存储速度(请求编译
器将其存放在CPU寄存器中)。
(一)基本变量声明:
语法:
类型名变量表;
(二)数组声明:
语法:
类型名变量1[大小],变量2[大小],...,变量n[大小];
(三)指针声明:
语法:
类型名*变量1,*变量2,...,*变量n;
注意:
(1)赋值时,诺带有*(间接访问运算符),则只能赋给变量的内容,
不然只能赋给地址;
(2)赋内容以前必须先赋予可访问的地址;
(四)指针数组
语法:
类型名*变量1[大小],*变量2[大小],...,*变量n[大小];
注意:
(1)赋值时,诺带有*(间接访问运算符),则只能赋给变量的内容,
9
不然只能赋给地址;
(2)赋内容以前必须先赋予可访问的地址;
(五)数组下标
语法:
数组名[任意表达式];
第三章:扩展数据类型
扩展数据类型可由用户定义,分为结构类型(struct)、牧举类
型(enum)以及联合类型(union)。
注意:诺不加typedef关键字,这只能定义变量和标签。
(一)牧举类型定义:
语法:
Typedefenum[标签]
{
用户标识符表
}类型名;
(二)结构类型定义
语法:
Typedefstruct[标签]
{
类型名1变量1;
类型名2变量2;
...
10
类型名n变量n;
}类型名;
(三)联合类型定义
说明:编译器只为联合类型中最大的成员变量分配空间,一
个成员变量改变,其余成员变量同时改变;
语法:
Typedefunion[标签]
{
类型名1变量1;
类型名2变量2;
...
类型名n变量n;
}类型名;
第四章:函数
1、主函数
主函数是程序的入口,全部的C语言程序都有一个主函数,C语
言的主函数为main函数,区分大小写。
(一)无参程序
语法:
Intmain(void)
{
函数体;
11
}
(二)带程序参数的程序
语法:
Intmain(intargn,char*argc[])
{
函数体;
}
注意:
? Argn:程序向量,用户传递给程序的参数数量(包括程序名);
? Argc:程序参数,用户传递给程序的参数(包括程序名)
2、函数声明
语法:
类型名函数名(形参表);
形参表声明:
类型名变量;
注意:不一样形参用逗号分割;
第五章:表达式
1、赋值表达式
语法:
变量=表达式;
2、算术表达式
语法:
12
操做数1(算术运算符)操做数2;
3、逻辑表达式
语法:操做数1(逻辑运算符)操做数2;
4、强制类型转换
语法:(转换类型)变量;
5、逗号表达式
语法:操做数1,操做数2,...,操做数n;
6、条件表达式
语法:条件:True?False
说明:当条件为True时,执行True,不然执行False。
7、初始化表达式
语法:类型名变量1=操做数1,变量2=操做数2,...,变量n=操
做数n;
8、复合赋值运算表达式
语法:变量(运算符)=表达式;
说明:等效于变量=变量(运算符)表达式;
第六章:语句结构
1、顺序结构
说明:程序顺序执行的结构
2、选择结构
(一)if语句
(1)if-else语句
13
语法:
If(逻辑表达式1)
{
程序块1;
}
Else
{
程序块2;
}
(2)if语句
语法:
If(逻辑表达式)
{
程序块;
}
(3)else-if语句
语法:
If(逻辑表达式1)
{
程序块1;
}
Elseif(逻辑表达式2)
14
{
语句块2;
}
Elseif(逻辑表达式3)
{
语句块3;
}
...
Else
{
程序块n;
}
(二)switch语句
语法:
Switch(表达式)
{
Case常量表达式1:语句1;
Case常量表达式2:语句2;
Case常量表达式3:语句3;
...
Case常量表达式n-1:语句n-1;
Default:语句n;
15
}
Switch语句的控制流是从符合条件的标号进入,从最后一条
语句出来;
3、循环结构
(一)while语句
语法
While(逻辑表达式)
{
语句块;
}
(二)do-while语句
语法:
Do
{
语句块;
}
While(逻辑表达式);
(三)for语句
语法:
For(初始化表达式;逻辑表达式;更新表达式)
{
语句块;
16
}
4、跳转结构
(一)goto语句--无条件转移指令
语法:goto标号;
(二)break语句--跳出循环、switch
语法:break;
(三)return语句--返回语句
语法:return(返回值);
(四)continue语句--跳出一次循环
语法:continue;
5、空语句“;”
注:
(1)“;”是C、C++语言的语句结束符,语句后面必须加“;”;
(2){、}为程序块定义,后不须要加语句结束符。
第七章:数据结构
数据结构分为动态数据结构和静态数据结构
1、链表
链表属于动态数据结构,实质上是一个带有指向下一个节点的指针的
结构类型的指针;
运算符:
间接成员访问运算符(->)为链表运算符;
2、有序表
17
有序表实指从头至尾都按必定顺序(升序或降序)排列的数据结构,
用链式结构表示是为动态数据结构。
3、队列
队列是一种先进先出结构,用链式结构表示是为动态数据结构,而且
以后一个结构的指针域指向队头。
4、栈
栈是一种后进先出结构,用链式结构表示是为动态数据结构。
附录1:C语言运算符及优先级
优先级 运算符 名称或含义 使用形式 结合方向 说明
1 [] 数组下标 数组名[常量表达式] 左到右
() 圆括号 (表达式)/函数名(形
参表)
. 成员选择(对象) 对象.成员名
-> 成员选择(指针) 对象指针->成员名
2 - 负号运算符 -表达式 右到左 单目运算符
(类型) 强制类型转换 (数据类型)表达式
++ 自增运算符 ++变量名/变量名++ 单目运算符
-- 自减运算符 --变量名/变量名-- 单目运算符
* 取值运算符 *指针变量 单目运算符
& 取地址运算符 &变量名 单目运算符
! 逻辑非运算符 !表达式 单目运算符
~ 按位取反运算符 ~表达式 单目运算符
sizeof 长度运算符 sizeof(表达式)
3 / 除 表达式/表达式 左到右 双目运算符
18
* 乘 表达式*表达式 双目运算符
% 余数(取模) 整型表达式/整型表达

双目运算符
4 + 加 表达式+表达式 左到右 双目运算符
- 减 表达式-表达式 双目运算符
5 << 左移 变量<<表达式 左到右 双目运算符
>> 右移 变量>>表达式 双目运算符
6 > 大于 表达式>表达式 左到右 双目运算符
>= 大于等于 表达式>=表达式 双目运算符
< 小于 表达式<表达式 双目运算符
<= 小于等于 表达式<=表达式 双目运算符
7 == 等于 表达式==表达式 左到右 双目运算符
!= 不等于 表达式!= 表达式 双目运算符
8 & 按位与 表达式&表达式 左到右 双目运算符
9 ^ 按位异或 表达式^表达式 左到右 双目运算符
10 | 按位或 表达式|表达式 左到右 双目运算符
11 && 逻辑与 表达式&&表达式 左到右 双目运算符
12 || 逻辑或 表达式||表达式 左到右 双目运算符
13 ?: 条件运算符 表达式1?表达式2:
表达式3
右到左 三目运算符
14 = 赋值运算符 变量=表达式 右到左
/= 除后赋值 变量/=表达式
*= 乘后赋值 变量*=表达式
%= 取模后赋值 变量%=表达式
+= 加后赋值 变量+=表达式
19
-= 减后赋值 变量-=表达式
<<= 左移后赋值 变量<<=表达式
>>= 右移后赋值 变量>>=表达式
&= 按位与后赋值 变量&=表达式
^= 按位异或后赋值 变量^=表达式
|= 按位或后赋值 变量|=表达式
15 , 逗号运算符 表达式,表达式,… 左到右 从左向右顺
序运算
附录2:ANSIC定义的C语言32个关键字
关键字 意义
auto 声明自动变量
short 声明短整型变量或函数
int 声明整型变量或函数
long 声明长整型变量或函数
float 声明浮点型变量或函数
double 声明双精度变量或函数
char 声明字符型变量或函数
struct 声明结构体变量或函数
union 声明共用数据类型
enum 声明枚举类型
typedef 用以给数据类型取别名
const 声明只读变量
unsigned 声明无符号类型变量或函数
20
signed 声明有符号类型变量或函数
extern 声明变量是在其余文件中声明
register 声明寄存器变量
status 声明静态变量
volatile: 说明变量在程序执行中可被隐含地改变
void 声明函数无返回值或无参数,声明无类型指针
if 条件语句
else 条件语句否认分支(与if连用
switch 用于开关语句
case 开关语句分支
for 一种循环语句
do 循环语句的循环体
while 循环语句的循环条件
goto 无条件跳转语句
continue 结束当前循环,开始下一轮循环
break 跳出当前循环
default 开关语句中的“其余”分支
sizeof 计算数据类型长度
return 子程序返回语句(能够带参数,也可不带参数)编程

相关文章
相关标签/搜索