当前位置: 首页 > news >正文

佛山企业快速建站上海市营业执照查询

佛山企业快速建站,上海市营业执照查询,河北建设工程招标投标协会网站,怎样在微信中做网站文章目录 C现代方法笔记#xff08;chapter12#xff09;序言0.1 C标准0.2 现代方法 第1章 C语言概述1.1 C语言的历史1.1.1 起源1.1.2 标准化1.1.3 基于C的语言 1.2 C语言的优缺点1.2.1 C语言的优点1.2.2 C语言的缺点1.2.3 高效地使用C语言 第2章 C语言基本概念2.1 编写… 文章目录 C现代方法笔记chapter12序言0.1 C标准0.2 现代方法 第1章 C语言概述1.1 C语言的历史1.1.1 起源1.1.2 标准化1.1.3 基于C的语言 1.2 C语言的优缺点1.2.1 C语言的优点1.2.2 C语言的缺点1.2.3 高效地使用C语言 第2章 C语言基本概念2.1 编写一个简单的C程序2.1.1 编译和链接2.1.2 集成开发环境IDE 2.2 简单程序的一般形式2.2.1 指令2.2.2 函数2.2.3 语句2.2.4 显示字符串 2.3 注释2.4 变量和赋值2.4.1 类型2.4.2 声明2.4.3 赋值2.4.4 显示变量的值2.4.5 初始化2.4.6 显示表达式的值 2.5 读入输入2.6 定义常量的名字2.7 标识符2.8 C程序的书写规范问与答总结 C现代方法笔记chapter12 序言 0.1 C标准 C标准早期有C89,C99(普及)逐渐演化至C11,C18(最新)。冷知识C89标准中标识符只有前6个字符保证有效而且不一定区分大小写C99要求每个函数都有一个显式的返回类型。 0.2 现代方法 正确看待C语言强调C语言的标准版本揭穿神话强调软件工程推迟介绍C语言的底层特性不再强调“手工优化” 第1章 C语言概述 1.1 C语言的历史 1.1.1 起源 C语言是贝尔实验室开发的是比汇编语言更加高级的一种语言是B语言升级版的升级版。C语言替代汇编语言重写UNIX系统改用C语言后程序具有良好的可移植性只要为贝尔实验室的其它计算机编写C编译器这些团队就能让UNIX系统也运行在那些机器上。 1.1.2 标准化 1983年美国国家标准协会(ANSI)开始推动C语言标准制定。1990年ISO通过ANSI的C标准将其作为国际标准也就是C89或者C90。1999通过了C99标准。C语言最近的两次改变分别发生在2011和2018年这两年分别通过了C11和C18。从C99到C11再到C18的变化没有从C89到C99那么显著。尤其是从C11到C18的变化仅限于技术修饰和澄清总体上没有显著的改变也没有引入新的语言特性。 1.1.3 基于C的语言 C语言对现代编程语言有着巨大的影响许多现代编程语言都借鉴了大量C语言的特性。以下几种非常具有代表性 C包括了所有C特性但增加了类和其他特性以支持面向对象编程。Java基于C因此也继承了C的许多特性。C#由C和JAVA发展起来的一种较新的语言。Perl最初是一种非常简单的脚本语言在发展过程中采用了C的许多特性。 1.2 C语言的优缺点 C是一种底层语言C提供了对机器级概念使得程序可以快速执行。C是一种小型语言C很大程度上依赖一个标准函数的“库”。C是一种包容性语言有着更高的自由度。 1.2.1 C语言的优点 高效。可移植性。功能强大。灵活。标准库C标准库包含了数百个可以用于输入/输出、字符串处理、存储分配以及其他实用操作的函数。与UNIX系统的集成。 1.2.2 C语言的缺点 C程序更容易隐藏错误。C程序可能会难以理解。C程序可能会难以修改。 1.2.3 高效地使用C语言 学习如何规避C语言的缺陷。现代编译器可以检查到常见的缺陷并且发出警告但是没有一个编译器可以发现全部缺陷。使用软件工具使程序更加可靠。比如静态编译工具。利用现有的代码库。采用一套切合实际的编码规范。避免“投机取巧”和极度复杂的代码。要遵守简洁但仍然易于理解的编码风格。紧贴标准。为了程序的可移植性最好避免使用标准中没有的特性和库函数。 第2章 C语言基本概念 本章介绍了C语言的一些基本概念包括预处理指令函数变量和语句。 2.1 编写一个简单的C程序 /* 显示双关语“To C, or not to C: that is the question.” */ //pun.c #include stdio.hint main(void){printf(To C, or not to C: that is the question.\n);return 0; }接下来对这段代码做简要介绍 第一行#include stdio.h是必不可少的它包含了C语言标准输入/输出库的相关信息程序的可执行代码都在main函数中这个函数代表“主”程序。main函数中的第一行代码是用来显示期望信息的。printf函数来自标准输入/输出库可以产生完美的格式化输出。代码\n告诉printf函数执行完消息显示后要进行换行操作。第二行代码return 0;表明程序终止时会向操作系统返回值0。 2.1.1 编译和链接 为了把程序转换为机器可以执行的形式通常包括下面3个步骤 预处理。首先程序会被交给预处理器preprocessor。预处理器执行以#开头的命令指令。编译。修改后的程序现在可以进入编译器compiler了。编译器会把程序翻译成机器指令目标代码此时的程序还是不可以运行的。链接。链接器linker把由编译器产生的目标代码和所需的其他附加代码整合在一起生成完全可执行的程序。这些附加代码包括程序中用到的库函数如printf函数。 以上过程往往是自动实现的因此人们会发现这项工作不是太艰巨通常预处理器和编译器集成在一起所以人们甚至可能不会注意它在工作。 GCC作为最流行的C编译器之一它随Linux发行但也有面向其他很多平台的版本。这种编译器的使用与传统的UNIX cc编译器类似。编译程序pun.c可以使用以下命令 gcc -o pun pun.c 2.1.2 集成开发环境IDE 集成开发环境是一个软件包我们可以在其中编辑、编译、链接、执行甚至调试程序。 2.2 简单程序的一般形式 简单C程序一般具有如下形式 指令int main(void){语句 }即使是最简单的C程序也依赖3个关键的语言特性指令在编译前修改程序的编辑命令、函数被命名的可执行代码块如main函数和语句程序运行时执行的命令。 2.2.1 指令 比如#include stdio.h这条指令说明在编译前把stdio.h中的信息“包含”到程序中。C语言拥有大量类似于stdio.h的头header每个头都包含一些标准库的内容。C语言不同于其他的编程语言它没有内置的“读”和“写”命令。输入/输出功能由标准库中的函数实现。所有指令都是以字符#开始的。这个字符可以把C程序中的指令和其他代码区分开来。指令默认只占一行每条指令的结尾没有分号或其他特殊标记。 2.2.2 函数 事实上C程序就是函数的集合函数分为两大类一类是程序员编写的函数另一类则是作为C语言实现的一部分提供的函数。后者称为库函数因为他们属于一个由编译器提供的函数“库”。 在C语言中函数仅仅是一系列组合在一起并且被赋予了名字的语句。某些函数计算数值并返回某些函数则不是这样。函数用return语句来指定所“返回”的值。一个C程序可以包含多个函数但只有main函数必须有的。return 0;有两个作用一是使main函数终止二是指出main函数的返回值是0表示程序正常终止。 2.2.3 语句 语句是程序运行时执行的命令。 pun.c就用了返回语句和函数调用语句。C语言规定每条语句都要以分号结尾。指令不需要分号结尾。 2.2.4 显示字符串 字面串string literal————用一对双引号包围的一系列字符。当用printf函数显示字面串时最外层的双引号不会出现。\n表示换行。 2.3 注释 每一个程序都应该包含识别信息即程序名、编写日期、作者、程序的用途以及其他相关信息。 符号/*标记注释的开始*/标记注释的结束。简短的注释可以和程序中的其他代码放在同一行翼型注释。C99标准提供了另一种类型的注释以//开始。作为一种新的注释风格//有两个主要优点首先因为注释会在行末自动终止所以不会出现未终止的注释意外吞噬部分程序的情况;其次因为每行注释前面都必须有//所以多行注释看上去更加醒目。 2.4 变量和赋值 大多数程序在产生输出之前往往需要执行一系列的计算因此需要在程序执行过程中有一种临时存储数据的方法C语言中的这类存储单元被称为变量。 2.4.1 类型 每个变量都必须有一个类型。类型会影响变量的存储方式以及允许对变量进行的操作。数值型变量的类型决定了变量所能存储的最大值和最小值同时也决定了是否允许在小数点后出现数字。进行运算时float型变量通常比int型变量慢。float型变量所存储的数值往往只是实际数值的一个近似值。比如在一个float型变量中存储0.1,以后可能会发现变量的值为0.099 999 999 999 999 87,这是舍入造成的误差。 2.4.2 声明 在使用变量之前必须对其进行声明为编译器所做的描述。为了声明变量首先要指定变量的类型然后说明变量的名字。 比如int height;说明height是一个int型变量这意味着变量height可以存储一个整数值。如果几个变量具有相同的的类型就可以把它们的声明合并例如float profitloss;注意每一条完整的声明都要以分号结尾。当main函数包含声明时必须把声明放置在语句之前。 int main(void){声明语句 }就书写格式而言建议在声明和语句之间留出一个空行。在C99标准中声明可以不在语句之前。例如main函数中可以先有一个声明后面跟一条语句然后再跟一个声明。 2.4.3 赋值 变量通过赋值assignment的方式获得值。 height 8; length 12; width 10;把数值8、12和10分别赋值给变量height、length和width其中8、12和10称为常量constant。变量在赋值或以其它方式使用之前必须先声明。当我们把一个包含小数点的常量赋值给float型变量时最好在该常量后面加一个字母f代表float。比如profit 21.34f不加f可能触发编译器的警告。一般情况下赋值运算的右侧可以是一个含有常量、变量和运算符的公式。C语言的术语中称为表达式 2.4.4 显示变量的值 printf(height: %d\n, height); 占位符%d用来指明在显示过程中变量height的值的显示位置。%d仅用于int型变量。%f则显示float型变量。 默认情况下%f会显示出小数点后6位数字。如果要强制%f显示小数点后p位数字可以把p放置在%和f之间。比如printf(Profit: $%.2f\n, profit)。 C语言没有限制调用一次printf可以显示的变量数量。 2.4.5 初始化 当程序开始执行时某些变量会被自动设置为0static类型,而大多数变量则不会auto类型。没有默认值并且尚未在程序中被赋值的变量是未初始化的。 在声明变量的同时给变量赋值。在int height, length, width 10这个例子中只有变量width拥有初始化器10而前面两个变量没有两个变量没有初始化。 2.4.6 显示表达式的值 比如printf(%d\n, height * length * width); printf显示表达式的值的能力说明了C语言的一个通用原则在任何需要数值的地方都可以使用具有相同类型的表达式。 2.5 读入输入 scanf和printf中的字母f都表示“格式化”的意思。两个函数都需要使用格式串format string来指定输入数据或输出数据的形式。 scanf函数需要知道将获得的输入数据的格式而printf函数需要知道输出数据的显示格式。 为了读入一个int型值可以使用下面的scanf函数调用 scanf(%d, i); /* 字符串“%d”说明scanf读入的是一个整数而i是一个int型变量用来存储scanf读入的输入。读入一个float型值时需要一个形式略有不同的scanf调用。 */ scanf(%f, x);提示用户输入的消息提示符通常不应该以换行结束因为我们希望用户在同一行输入。这样当用户敲回车键时光标会自动移动到下一行。因此就不需要程序通过显示换行符来终止当前行了。 2.6 定义常量的名字 当程序含有常量时建议给这些常量命名。可以采用宏定义的特性给常量命名#define INCHES_PER_POUND 166这里的#define预处理指令此行的结尾也没有分号。编译时预处理器会把每一个宏替换为其表示的值。此外可以使用宏来定义表达式define RECIPROCAL_OF_PI (1.0f / 3.14159f)当宏包括运算符时建议使用括号把表达式括起来。 注意宏的名字只用了大写字母。这是大多数C程序员遵循的规范并不是C语言本身的要求。 2.7 标识符 在编写程序时需要对变量、函数、宏和其他实体进行命名。这些名字称为标识符。 在C语言中标识符可以含有字母、数字和下划线但是必须以字母或者下划线开头。比如,times10 get_next_char _done这三个是合法的而10times get-next-char这两个是不合法的。C语言是区分大小写的所以许多程序员会遵循在标识符中只使用小写字母的规范宏命名除外。为了使名字清晰必要是还会插入下划线。而另外一些程序员则避免使用下划线他们的方法是把标识符中的每个单词用大写字母开头symbolTable currentPage nameAndAddress。C对标识符的最大长度没有限制因此不要担心使用较长的描述性名字。 关键字对C编译器而言都有着特殊的意义因此关键字不能作为标识符来使用。 2.8 C程序的书写规范 语句可以分开放在任意多行内。记号间的空格使我们更容易区分记号。基于这个原因我们通常会在每个运算符的前后都放上一个空格volume height * length * width;。此外还会在每个逗号后边放一个空格。某些程序员甚至在圆括号和其他标点符号的两边都加上空格。缩进有助于轻松识别程序嵌套。例如为了清晰的表示出声明和语句都嵌套在main函数中应该对他们进行缩进。空行可以把程序划分成逻辑单元从而使读者更容易辨别程序的结构。没有空行的程序很难阅读就像不分章节的书一样。把字符串从一行延续到下一行需要一种特殊的方法才可以实现后面的章节将会讲到。 问与答 问1GCC是什么的简称 答GCC最初是GNU C Compiler的简称现在指GNU Compiler Collection这是因为最新版本的GCC能够编译用Ada、C、C、Fortran、Java 和Objective-C等多种语言编写的程序。 问2明白了但GNU又是什么意思呢 答GNU指的是“GNU’s Not UNIX!”发音为guh-NEW它是自由软件基金会Free Software Foundation的一个项目。自由软件基金会是由Richard M. Stallman发起的一个组织旨在抗议对UNIX 软件授权的各种限制。从它的网站可以看出自由软件基金会认为用户应该可以自由地“运行、复制、发布、研究、改变和改进”软件。GNU 项目从头开始重写了许多传统的UNIX 软件并使公众能够免费地获得。 GCC 和其他GNU软件对于Linux操作系统来说是至关重要的。Linux本身只是操作系统的“内核” 处理程序调度和基本输入/输出服务的部分为了获得具备完整功能的操作系统GNU 软件是必要的。 问3GCC发现程序中错误的能力如何 答GCC有多个命令行选项来控制程序检查的彻底程度。使用这些选项可以帮助我们有效地找出程序中潜在的故障区域。下面是一些比较常用的选项。 –Wall :使编译器在检测到可能的错误时生成警告消息。–W后面可以加上具体的警告代码-Wall表示“所有的–W选项”。为了获得最好的效果该选项应与–O选项结合使用。 –W :除了–Wall生成的警告消息外还需要针对具体情况的额外警告消息。 –pedantic :根据C标准的要求生成警告消息。这样可以避免在程序中使用非标准特性。 –ansi :禁用GCC的非标准C特性并启用一些不太常用的标准特性。 –stdc89或–stdc99指明使用哪个版本的C编译器来检查程序。这些选项常常可以结合使用 % gcc –O –Wall –W –pedantic –stdc99 –o pun pun.c 问4为什么C语言如此简明扼要如果在C语言中用begin和end代替{和}用integer代替int等等程序似乎更加易读。 答据说C程序的简洁性是由开发该语言时贝尔实验室的环境造成的。第一个C语言编译器是运行在DEC PDP-11计算机一种早期的小型计算机上的而程序员用电传打字机实际上是一种与计算机相连的打字机输入程序和打印列表。因为电传打字机的速度非常慢每秒钟只能打出10 个字符所以在程序中尽量减少字符数量显然是十分有利的。 问5在某些C语言书中main函数的结尾使用的是exit(0)而不是return 0二者是否一样呢 答当出现在main函数中时这两种语句是完全等价的二者都终止程序执行并且向操作系统返回0值。使用哪种语句完全依据个人喜好而定。 问6如果main函数末尾没有return语句会产生什么后果 答return语句不是必需的如果没有return语句程序一样会终止。在C89中返回给操作系统的值是未定义的。在C99中如果main函数声明中的返回类型是int如我们的例子所示程序会向操作系统返回0否则程序会返回一个不确定的值。 问7编译器是完全移除注释还是用空格替换注释呢 答一些早期的编译器会删除每条注释中的所有字符使得语句 a/**/b 0; 可能被编译器理解成 ab 0; 然而依据C标准编译器必须用一个空格字符替换每条注释语句因此上面提到的技巧并不可行。我们实际上会得到下面的语句 a b 0; 问8如何发现程序中未终止的注释 答如果运气好的话程序将无法通过编译因为这样的注释会导致程序非法。如果程序可以通过编译也有几种方法可以用。通过用调试器逐行地执行程序就会发现是否有些行被跳过了。某些集成开发环境会使用特别的颜色把注释和其他代码区分开来。如果你使用的是这样的开发环境就很容易发现未终止的注释因为误把程序文本包含到注释中会导致颜色不同。此外诸如lint 1.2 节之类的程序也可以提供帮助。 问9在一个注释中嵌套另一个注释是否合法 答传统风格的注释/*…*/不允许嵌套。例如下面的代码就是不合法的 /* /*** WRONG ***/ */第2行的符号*/会和第1行的/*相匹配所以编译器会把第3行的*/标记为一个错误。 C语言禁止注释嵌套有些时候也是个问题。假设我们编写了一个很长的程序其中包含了许多短小的注释。为了临时屏蔽程序的某些部分比如在测试过程中我们首先会想到用/*和*/“注释掉”相应的程序行。但是如果这些代码行中包含有传统风格的注释这种方法就行不通了。不过C99注释以//开始的注释可以嵌套在传统风格的注释中这是这类注释的另一个优势。 后面我们将看到可以用一种更好的方法来屏蔽部分程序 14.4 节。 问10float 类型的名字由何而来 答float是floating-point的缩写形式它是一种存储数的方法而这些数中的小数点是“浮动的”。float类型的值通常分成两部分存储小数部分或者称为尾数部分和指数部分。例如12.0这个数可以以1.5×2^3的形式存储其中1.5是小数部分而3是指数部分。有些编程语言把这种类型称为real类型而不是float类型。 问11为什么浮点常量需要以字母f结尾 答完整的解释见第7章。这里只简单回答一下包含小数点但不以f结尾的常量是doubledouble precision的缩写型的。double型的值比float型的值存储得更精确并且可以比float型的值大因此在给float型变量赋值时需要加上字母f。如果不加f编译器可能会生成一条警告消息告诉你存储到float型变量中的数可能超出了该变量的取值范围。 问12对标识符的长度真的没有限制吗 答是又不是。C89标准声称标识符可以是任意长但只要求编译器记住前31个字符 C99中是63个字符。因此如果两个名字的前31个字符都相同编译器可能会无法区分它们。 更复杂的情况是C标准对于具有外部链接18.2节的标识符有特殊的规定而大多数函数名属于这类标识符。因为链接器必须能识别这些名字而一些早期的链接器又只能处理短名字所以在C89中标识符只有前6个字符才是有效的。此外C89还不区分字母的大小写。因此ABCDEFG和abcdefg可能会被作为相同的名字处理。C99中前31个字符有效且字母区分大小写。 大多数编译器和链接器比标准所要求的更宽松因此实际使用中这些规则都不是问题。不要担心标识符太长还是注意不要把它们定义得太短吧。 问13缩进时应该使用多少空格 答这是个难以回答的问题。如果预留的空间过少会不易察觉到缩进如果预留的空间太多则可能会导致行宽超出屏幕或页面的宽度。许多C程序员采用8个空格即一个制表键来缩进嵌套语句这可能太多了。研究表明缩进3个空格是最合适的但许多程序员不太习惯于非2的幂次。我习惯于缩进3或4个空格但是考虑到页面的需要本书采用了2 个空格的缩进方式。 总结 本文章为之前两次笔记的补充欢迎各位大佬阅读学习有不对的地方还请指正不胜感激。后续章节笔记会持续更新敬请期待书名《C语言程序设计现代方法第2版·修订版》
http://www.dnsts.com.cn/news/202426.html

相关文章:

  • 做外贸学习网站苏州住建网站
  • 微网站如何做微信支付小型网站建设多少钱
  • 制作网站专业公司吗重新建设网站的报告
  • 小学英语教师做应用相关网站制作个简单公司网站要多少钱
  • 临汾推广型网站建设sydney wordpress
  • wordpress站点获利东营信息发布平台
  • centos系统怎么做网站建设银行企业网站打不开
  • 建设网站的简单编程语言泉州免费网站制作
  • 电商企业网站建设情况企业网络营销策划平台
  • 仿牌网站安全html中文网页模板素材
  • 服装如何做微商城网站wordpress 修改点击数
  • 网站镜像 cdn门户网站建设内
  • 大连网站制作 连城传媒建设网校
  • 南宁物流公司网站建设wordpress充值漏洞
  • 微网站菜单公司做网站怎么推广
  • 自适应网站导航怎么做花都区水务建设管理中心官方网站
  • 辽阳市网站建设网站建设 安庆
  • 如何规划一个外贸网站自己的电脑做网站服务器 买的服务器 速度
  • 网站建设浦东凡科轻站小程序怎么样
  • 400网站建设推广ui界面图片
  • 蓝鸟E4A做网站程序两个网站放在同一个空间有什么影响吗
  • 高新网站制作哪家好九度互联网站建设
  • 网站服务器迁移步骤在线培训网站怎么做
  • 东莞网站seo技术查看网站速度
  • 聊城建设银行网站设计制造中国第一架飞机的人是
  • 来安网站建设旅游海外推广网站建设方案
  • 如何做产品展示网站网站建设2018
  • 山西seo网站设计域名取消wordpress
  • 山西网站建设公司哪家好给几个那方面网站网址
  • 无聊网站建设手机代理服务器免费版