专题2.符号的技巧:

1) 注释符与转义符

vC语言中的接续符(\)是指示编译器行为的利器:

接续符的使用:编译器会将反斜杠剔除,嗯在反斜杠后面的字符自动解到前面的一行。

在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格,

接续符适合在定义宏代码块时使用,

2)单引号与双引号

3)逻辑运算符使用分析:&与运算符,||或运算符,!非运算符.

程序中的短路 ,短路规则:

||--从左向右计算,当遇到为真的条件时停止计算,整个表达式为真;所有条件为假时表达式才为假,

&&从左向右开始计算,当遇到为假的的条件时停止计算,整个表达式为假;所有条件为真时表达式才为真。

!运算符:!0=1,!1=0;!100=0,!-1000=0,

C语言中的逻辑运算符”!”只认得0,只知道见了0就返回1,因此当起作用的值不是0时,其结果为0.

三目运算符(a?b:c)可以作为逻辑运算符的载体,

规则:当a的值为真时,返回b的值;否则返回c的值,

4)位运算符分析:

&按位与、|按位或、^按位异或、~取反、<<左移、>>右移。

左移和右移注意点:

左移运算符<<将运算数的二进制位左移,

规则:高位丢弃,低位补零,

右移运算符>>把运算数的二进制位右移,

规则:高位补符号位,低位丢弃,

注:补齐位的值,

技巧:左移n位相当于乘以2的n次方,但效率比数学运算符高,

右移n位相当于除以2的n次方,但效率比数学运算符高,

++,--操作符分析:

贪心法:--  ++,-- 表达式的阅读技巧:

编译器处理的每个符号应该尽可能多的包含字符,

编译器以从左到右的顺序一个一个尽可能多的读入字符

当即将读入的字符不可能和已读入的字符成合法为止,

#include《sdtio.h>

Int main ()

{  Int i=0;  Int j=++i+++i+++i; -------贪心法:c语言编译器尽可能多的包含字符,++i是一个运算符结果是1,后再包含++时,就是1++,

这时编译器认 为是erro,

Int a=1; Int b=2;Int c=a+++b;运算方式:a++ 再次读到+,还能再读到b,这时a++是先赋予值后运算方式,所以a=1,在加上b=3,

再次运算a++的”+”运算符=2,

Int*p=6a;B =b/*p;运算方式:表达式b/*p.根据贪心法规则:从b字符再读到/,c语言认为是除法运算,还能再读把*都进去,c语言中的/*是注释符,

/*之间加空格避免错错误,

Return 0;

}

++运算符运算方式:

Int i=3;

Int x=(++i)+(++i)+(++i);

Printf=(“x=%d\n”,x);

Return 0;

运算结果:16或18,

值16运算方式:先运算前两个++i;运算中i加了两次,5+5=10,最后一个i加了一次,所以5+5+6=16;

值18运算方式:三个i加了三次后i=6,所以6+6+6=18,

逗号与++运算方式:

Int x=3;

Int K=(++x,x++,x+10);

Printf(“k=%d\n”,k);

Return 0;

运算结果:15;

运算方式:从左到右顺序求值,之后最后一个表达式的值就是逗号表达式的值;

++x=4,x++=5,所以x+10=5+10=15;

优先级和类型转换分析:

.的优先级高于*,-.>操作符用于消除这个问题,[]高于*,函数()高于*,==和!=高于位操作,

==和!=高于赋予符,算术运算符高于位移运算符,逗号运算符在所有运算符中优先级最低,

C语言隐式类型转换,

算数运算式中,低类型转换为高类型,

赋值表达式,表达式是的值转换左边变量的类型,

函数调用时,实参转换为形的类型

函数返回值,return 表达式转换为返回值类型,

Char-àint àunsigned int àlongàunsigned longàdouble

Char àshortàint àunsigned intàlong àunsigned long àdoubleàfloat

5)预编译

处理所有的注释,以空格代替,

将所有的#define删除,并且展开所有的宏定义,

处理条件编译指令#if,#ifdef,#elif,#else,#endif

处理#include,展开呗包含的文件,

保留编译器需要使用的#pragma指令,

预处理指令:gcc-E file.c –o hello.i

编译:

对于处理文件进行一系列词法分析,语法分析和语义分析

语法分析主要分析关键字,表示符,立即数是否合法,语法分析主要分析表达式是否遵循语法规则

语义分析子啊语法分析的基础上进一步分析表达式是否合法

分析结束后进行代码优化生成相应的汇编代码文件

编译指令:gcc –s file.c –o hello.s

汇编:汇编器将汇编代码转变为机器可以执行的指令,

每个汇编句几乎都对应一条机器指令

汇编指令:gcc –c file.s –o hello.o

链接器的意义

连接器的主要作用是各个模块之间相互引用的部分处理好,

使得各个模块之间能够正确的衔接。

模块拼装:  静态链接,(file1.o,file2.o,libc.a)-à链接器(linker)-àa.out

动态链接:file1.cà编译器(gcc)àfile1.oà连接器(linker)àa.out

Lib1.soàstub1à连接器(linker)àa.out

Lib2.soàstub2à链接器(linker)àa.out

编译器将编译工作主要分为预处理,编译和汇编三部

连接器的工作是各个独立的模块链接为可执行程序,

静态链接在编译期完成,动态链接在运行期完成,

--已经完成---专题二

c语言学习笔记---符号的更多相关文章

  1. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  2. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  3. Go语言学习笔记(1)——顺序编程

    Go语言学习笔记这一堆主要是<Go语言编程>(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...

  4. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  5. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  6. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  7. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  8. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  9. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

随机推荐

  1. 1<<30 hashMap 中使用位移运算的意义

    static final int MAXIMUM_CAPACITY = 1 << 30; 计算过程已1<<30为例,首先把1转为二进制数字 0000 0000 0000 000 ...

  2. Spring加载静态资源的方式

    解决方法1:在web.xml里添加如下的配置 <servlet-mapping> <servlet-name>default</servlet-name> < ...

  3. Unity -----一些可能存在的错误

    关于Unity中的资源管理,你可能遇到这些问题 张鑫 8 个月前 原文链接:关于Unity中的资源管理,你可能遇到这些问题 - Blog 在优化Unity项目时,对资源的管理可谓是个系统纷繁的大工程. ...

  4. 导入Maven项目后,Eclipse提示“Missing artifact ”类的错误

    导入Maven项目后,Eclipse提示“Missing artifact ”类的错误 标签: Maven Missing art 2016-08-15 16:05 679人阅读 评论(0) 收藏 举 ...

  5. VS 附加进程调试 Web项目

    一.新建IIS站点物理路径要指定项目开发Web路径(不可以发布), 二.Host文件网站域名要指定127.0.0.1 三.打开项目目录找到.vs\config\applicationhost.conf ...

  6. 解决Windows2003的IE安全级别不能修改的问题

    默认装完win2k3IE安全级别是不能修改的,不管怎么样修改,系统总提示说 “此域的推荐安全级别是“安全级-高”.您选择的级别较低.还是返回最高级别的.刚才弄voip,在win2k3虚拟机测试,差点气 ...

  7. vue如何加搜狗联盟广告

    搜狗联盟广告和百度联盟广告大同小异,但是好在百度联盟广告的使用方法网上还是可以找到一些,而搜狗联盟广告的教程网上几乎找不到,都是最基本的创建代码位的教程. 在vue中如果要加入搜狗联盟广告,就不能直接 ...

  8. 12 go实现几中基本排序算法

    include 冒泡排序 插入排序 快速排序 选择排序 这4种算法的内涵不再做解释了 github地址 冒泡排序算法 func maoPao(intSlice []int) []int { /* 冒泡 ...

  9. nodejs包管理工具npm

    用Node.js安装模块 在某个项目中单独安装的时候,npm会下载所有的文件到你项目中的一个叫做node_modules的文件夹内 全局模块会被安装到{prefix}/lib/node_modules ...

  10. Synycovery 7.18f 一个优秀的同步软件

    Serial Key Name: Vdown RG Code: MCKOFA7MNGUQY7954