C 前言

C 前言

C 标准

  • 1989 年ANSI C 标准,简称C89
  • 1999 年ISO C 标准,简称C99
  • GNU C 对C 做了扩展,简称GNU C

文章在介绍语法默认采用C89, 用到C99,GNU C标准语法会有标注

词法元素

词法元素组成C 源码,同时也被称为符号或令牌(tokens),共有5类令牌 : 标识符,关键字,常量,操作符,分隔符。

标识符

由一串字符组成,用于标明变量、函数、自定义数据类型、预处理宏,可以包含字母、数字、’ _ ’ 。
首字母不能是数字 , 大小写是有区分的,GNU C 中是可以用 ‘$’ 符号

合法标识符:   add, wait, good,luck, _abc, __gdb, a123.
不合法标识符:  1231wait, "bad"

Add 与add , 这是两个不同的标识符

关键字

C 语言保留使用,不能用作其它用途。

  • C89 标准:
auto break case char const continue default do double else enum extern
float for goto if int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

C99 标准:

inline _Bool _Complex _Imaginary

GNU 扩展:

__FUNCTION__ __PRETTY_FUNCTION__ __alignof __alignof__ __asm
__asm__ __attribute __attribute__ __builtin_offsetof __builtin_va_arg
__complex __complex__ __const __extension__ __func__ __imag __imag__
__inline __inline__ __label__ __null __real __real__
__restrict __restrict__ __signed __signed__ __thread __typeof
__volatile __volatile__

restrict 在 c99 和gnu c 中是合法关键字.

常量

常量是一个数字或字符,比如 123、‘T’。

  • 整型常量: 代表一个整数,可是10进制、8进制、16进制,并且可以通过追加字符(U/u,L/l)强制指定数据类型(无符号型,有符号)。
123UL  -- 代表无符号长整形
0x10   -- 代表16进制整数
012    -- 代表8进制整数 
  • 字符常量: 由单引号(’ ‘) 标定的字符,比如’t’, 默认类型是整型,同时也支持’’ 标定的特殊字符,比如 \n , \r. 使用转义字符时,最多支持256个字符
'A'   -- 简单字符常量
\n    -- 转义字符常量
\000  -- 8进制常量
\x12  -- 16进制常量
  • 实数常量: 代表浮点类型的数据,包括整数和小数两部分。
0.7    --  带有小数点的实数
5e2    --  5 * 10 * 10 = 500
5e-2   -- 5*(1/100) = 0.05
123.01234L  -- 类型为long double
  • 字符串常量: 由双引号(” “) 标注的一系列字符串。
"Good C"   -- 一系列字符串组成
”\n New Line\n"  -- 有转义字符组成
操作符

由一组特定的符号(token) 完成一个操作,比如做 加法,减法操作。

 +   -  * /  =  %
分隔符

用于分离令牌(token)符号。空格不是分隔符

()  []  {}  ;  , .  :
空格

没有特别意义,用于写代码时方便阅读,编译器会忽略空格,字符串中的空格不会被忽略

" String space"  -- 不会被忽略
a = b      + c   -- 等同 a=b+c 

代码片段说明

在这里插入图片描述### 常用考点

  • sizeof : C语言中的关键字,用于计算变量所占内存空间大小,其值在编译阶段就已确定
int test_sizeof(void)
{
	int  i = 10;
	printf("i is %d,sizeof(i) is %d\r\n",i,sizeof(++i));
	return i;
}

以上代码返回值为 10;sizeof(i) = 4 (考虑32位系统,int 型内存占用4byte),预编译后代码大概为:

int test_sizeof(void)
{
 	int  i = 10;
 	printf("i is %d,sizeof(i) is %d\r\n",i,4);
 	return i;
}
  • 常量: 定义一个较大的数,比如表示一年有多少秒。常量后增加U的应用
	#define  SECONDS_PER_YEAR 365*24*60*60UL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值