[Linux] Linux C编程一站式学习 Part.1

摘要:
C语言的基本概念介绍程序和编程语言C语言--(编译器)--汇编语言--(汇编程序)--机器语言可移植性/平台独立性:平台是指计算机体系结构或操作系统,或两者的组合。

C语言入门

程序基本概念

  • 程序和编程语言
    • C语言--(编译器)--汇编语言--(汇编器)--机器语言(目标代码 / 可执行代码)
    • 可移植 / 平台无关:平台指计算机体系结构或操作系统,或二者的组合。不同的平台有不同的指令集,可识别不同的机器指令格式
    • 直接用某种计算机的汇编或机器指令写出来的程序只能在这种计算机上运行,各种计算机上都有C编译器可以把C程序编译成计算机自己的机器指令
    • 编译 / 解释语言:解释语言不需生成目标代码,由解释器一行行地,边翻译边执行
  • 自然语言和形式语言
    • 自然语言是人类讲的语言,如汉语、英语、法语
    • 形式语言是为了特定应用认为设计的语言,如数学符号、分子式、编程语言
    • 形式语言有严格的语法(Syntax)规则
    • 语法规则有关于符号(Token)和结构(Structure)的规则所组成
    • 符号:事先定义好的运算符,关于符号的规则为词法(Lexical)规则
    • 结构:符号的排列方式,关于结构的规则为语法(Grammar)规则
    • 解析(Parse):分析句子结构的过程
    • 自然语言与形式语言的区别
      • 歧义性(Ambiguity):形式语言的设计要求清晰、毫无歧义,每个语句都有明确含义而不管上下文如何
      • 冗余性(Redundancy):自然语言为消除歧义引入冗余,形式语言极少冗余
    • 与字面意思的一致性:自然语言充满隐喻(Metaphor),形式语言字面意思就是真实意思
    • 阅读形式语言(包括计算机程序)的建议
      • 形式语言远比自然语言紧凑,要多花时间阅读
      • 结构很重要,不要从上到下或从左到右地读,而应在大脑里解析,识别Token,分解结构
      • 关注细节,如拼写错误和符号错误等
  • 程序调试
    • Bug的分类
      • 编译时错误:语法错误导致编译失败
      • 运行时错误:编译器检查不出,但运行时出错导致程序崩溃(注意区分编译时和运行时两个概念)
      • 逻辑错误和语义错误:编译和运行都很顺利,但没有实现预计结果
    • 编程建议
      • 编程=调试:编程就是逐步调试直到获得期望结果
      • 总是从一个能正确运行的小规模程序开始,每做一步小的改动就立即调试

常量、变量和表达式

  • 定义、赋值、初始化
    • 定义:分配一块内存空间,并给它命名,如 int hour;
    • 赋值:把一个值存储在内存空间中,如 hour = 11;
    • 初始化:定义 + 赋值,如 int hour = 11;
  • 初始化是一种特殊的变量定义语句,而不是赋值语句
  • 变量名除了用在等号左边表示赋值外,其他情况都表示把它的值取出来,替换在那里
  • 表达式(Expression)由运算符(Operator)和操作数(Operand)组成
  • 赋值语句是表达式的一种
  • 运算符有优先级(Precedence),如不希望按默认的优先级运算需加括号(Parenthesis)
  • C语言规定等号运算符的结果就是等号左边被赋予的那个值
  • 常量可以赋值给变量,也可以和变量、运算符一起组成表达式
  • 最简单的表达式由单个常量或变量组成
  • 任何表达式都有一个值,表达式可以加 ; 号构成表达式语句

简单函数

  • sin是函数(Function),sin(pi/2)是函数调用(Function Call),pi/2是参数(Argument)
  • 函数调用sin(pi/2)也是表达式,由函数调用运算符() 和两个操作数组成,表达式的值为函数返回值(Return Value)
  • C语言的函数可以有副作用(Side Effect),这是它和数学函数在概念上的根本区别
  • 如表达式a=b,返回值是a的值,副作用是a的值被改变
  • 很多时候我们关心函数的副作用,而非返回值,如printf(),其返回值是实际打印的字符数,而非打印内容
  • 对于完全利用Side Effect的函数,可将其返回值定义为void
  • 函数原型(Prototype):函数名 + 参数类型和个数 + 返回值类型
  • 函数要先声明后使用
  • 定义变量时可以把同类型的变量列在一起,但定义函数参数时不可以,如void print_time(int hour, minute){}; 是错误的写法
  • 形参(Parameter)相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并用实参(Argument)的值来初始化
  • 函数提供了一个接口(Interface),调用函数就是使用这个接口,使用的前提是必须和接口保持一致
  • 能用函数传参代替的就不要用全局变量
  • 全局变量只能用常量表达式初始化,而局部变量可以用任意类型的表达式初始化
  • C语言规定全局变量的初始值保存在编译生成的目标代码中,所以必须编译时就能计算出来,如全局变量pi的初始化语句double pi = 3.14 + 0.0016;是合法的,而double pi = acos(-1.0);是不合法的
  • 若全局变量在定义时不初始化,则初始值是0(或"

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何用Apache POI操作Excel文件-----如何对一个单元格加注解?QWidget 的 close 与 Qt::WA_DeleteOnClose下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

oracle触发器调试

如果触发器执行成功,不会出现第4个图,不成功,会出现数据调试信息,具体报错位置会定位到。F7单步执行4.出错时,会出现调试数据,双击调试数据,可以复制出来...

Oracle11g温习-第七章:redo日志

thread:线程,在单实例的环境下,thread#永远是1sequence:日志序列号。在日志切换时会递增。FIRST_CHANGE#:在当前日志中记录的首个数据块的scn。...

Excel数据透视表、高级筛选

目录:1.数据透视表:数据透视表格式和操作说明:多个表一起创建数据透视表创建组创建计算字段创建计算项值显示方法切片器2。高级过滤:高级过滤和或关系精确过滤和模糊过滤通配符过滤原则查询不重复值(使用高级过滤)高级过滤区分大小写使用高级过滤查找空数据使用高级过滤查询两个表中相同的记录或未使用的记录过滤记录1和数据透视表1.正确的数据透视表格式:① 数据源的第一行...

sqlmap 安装使用

Id=1“”8)从配置文件加载攻击目标,并使用参数“-c”指定配置文件。Sqlmap将解析配置文件并根据配置文件的配置执行操作。sqlmap conf文件的安装目录中有一个名为sqlmap的文件,它是配置文件的模板。Id=1“--当前用户#列出数据库sqlmap.py u的所有用户”http://192.168.12.157:30336/#/login?...

传奇服务端各文件用途说明

传奇外传服务端├数据库服务器│├联系│├美国联邦储备银行│├日志│├! ID列表。txt(付款帐户列表,在Setup.exe中ServiceMode=TRUE时有效)!服务器信息.txt│├DBServer.exe│└DBSrc.ini├登录门│├登录网关.exe│└配置ini├登录服务器│├Chr日志│├ConLog公司│├计数日志│├国际数据库││├ID...

解决fiddler开启后打开浏览器提示无法访问网络

在使用python接口测试的过程中,jupyter经常被用来调试python代码。因为jupyter的默认代理端口是8888,所以当它启用时,它会打开fiddler数据包捕获并打开浏览器,提示“无法访问网络”。这个问题主要是由港口冲突造成的。您可以在工具选项连接中修改端口号,修改它,然后单击“确定”重新启动fiddler...