C深度剖析-符号与预处理

符号:

1.    连接符 与 转义符

1)C语言中反斜杠 \ 表示断行,编辑器将\后面的自动连接到前一行;

注意: \后面不能有空格,\的下一行之前也不能有空格

2)反斜杠 \作为转义字符开始标志

\n   回车换行         \t   横向跳到下一制表位置

\v   竖向跳格         \b   退格

\r    回车            \f    走纸换页

\\   反斜扛符"\"        \'   单引号符

错误的转义字符是(  A  )
A.'\091'          B.'\\'        C.'\0' 空字符          D.'\'‘

\0是八进制数转换符,所以不可能出现大于等于8的数;(\x十六进制)

2.    位运算符号

& 按位与                   | 按位或

^ 按位异或                 ~ 取反

<< 左移                    >> 右移

除了取反是单目运算(只需要一个操作数),其他是双目运算(需要两个操作数):

C中唯一的一个三目运算:?,

左移:高位丢弃,低位补0

右移(符号位随着一起移动):

正数,高位补0,负数,高位一般补1(由各个编辑器决定)

      左右移动的数值不能大于数据的长度,不能小于0

举例:

0x01<<2+3;输出:32 优先级:+ 在<<之前

C语言中的优先级:

括号成员第一; //括号运算符[]() 成员运算符. ->                                             

全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&                           

乘除余三,加减四; //这个"余"是指取余运算即%                                         

移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等                                             

等于(与)不等排第七; //即== !=                                                          

位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|)"三分天下"八九十;        

逻辑或跟与; //逻辑运算符:|| 和 &&十二和十一注意顺序:优先级(||) 低于 优先级(&&)条件高于赋值, //                                                   

逗号运算级最低! //逗号运算符优先级最低

! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

 注:三目运算“?:”问号后面的两个操作数必须是同一种数据类型;

 

预处理:

1)宏定义:

#define X 3

#define Y X*2

#undef X

#define X 2

int main()

{

int z=Y;

  printf("%d",z);

  return 0;

}

 宏的生命周期从#define开始到#undef结束;

2)文件包含:

#include <filename>:预处理到系统规定的路径中去获得这个文件

#include “filename”: 预处理应在当前目录中查找文件名为filename 的文件,若没有找到,则按系统指定的路径信息,搜索其他目录。

3)#line 预处理:

#line 的作用是改变当前行数和文件名称;

#line 30 a.h

其中,文件名a.h可以不写,这条预处理指令就可以改变当前的行号为30,文件名是a.h。

4)#pragma 预处理:

@#pragma pack  改变编译器的默认内存对齐方式

@#pragmamessage(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。

@#pragma once(比较常用)

只要在头文件的最开始加入这条指令就能够保证头文件被编译一次

@#pragmahdrstop

预编译头文件到此为止,后面的头文件不进行预编译,使用这个选项排除一些头文件。

@用#pragmastartup 指定编译优先级

@#pragmapackage(smart_init) ,根据优先级的大小先后编译。

5)#运算符

#defineSQR(x) printf("The square of x is %d.\n", ((x)*(x)));

SQR(8);    The square of x is 64.

#defineSQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)));

The square of8 is 64.

 6)##预算符:这个运算符把两个语言符号组合成单个语言符号。

#define XNAME(n) x ## n

如果这样使用宏:    XNAME(8)

则会被展开成这样:      x8


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值