我们把所有的c语言要素放在易读的笔记上。
来源: linux.cn •作者: Seth Kenlon •译者: dddct/p (正文字数: 5500,阅读时间约: 8分钟) )。
我们把所有的c语言要素放在易读的笔记上。
1972年,NRDWD(DennisRitchie )在贝尔实验室) Bell Labs )工作,几年前,他和他的团队成员发明了Unix。 在创建了一个长期使用的操作系统之后,他需要一个对这些Unix计算机进行编程,以便能够执行新任务的好方法。 虽然现在看来很奇怪,但当时编程语言相对较少,Fortran、Lisp、Algol、b语言很流行,但还不足以满足贝尔研究所的研究者们想要做的事情。 nrdwd展示了后来被称为程序员的主要特征的特质。 创造了他自己的解决方案。 他被称为c语言,近50年后仍被广泛使用。
为什么你应该学习 C 语言
今天,许多语言为程序员提供了比c语言更多的特性。 最明显的是c语言。 这是一种以相当露骨的方式命名的语言,建立在c语言之上,创造出优秀的面向对象语言。 但是,其他许多语言的存在有充分的理由。 因为计算机擅长一致的重复,所有可预见的东西都可以构建成编程语言,对程序员来说意味着更少的工作量。 为什么在c语言中一行句子可以把一个int转换成一个long (long x=long (n ) n ); 和c语言使用两行句子吗?但是,c语言今天也很有用。
首先,c语言是一种相当简单直接的语言。 除了编程基础知识之外没有高级概念是因为c语言实际上是现代编程语言的基础之一例如,c语言的特性之一是数组,但不提供词典(除非自己编写)。 当chdzc学习c语言的时候,你可以学习编程的基础组成部分。 那有助于你认识到现在编程语言的改进及其精心设计。
由于c语言是最小化的编程语言,因此很可能会获得许多其他编程语言看不到的性能提高。 考虑到你的代码能够运行得多快,chdzc很容易陷入重拳,所以询问你是否需要为特定的任务提供更多的速度是很重要的。 与Python和Java相比,使用c语言可以减少每次代码的烦恼。 c语言程序运行得非常快。 这是Linux内核用c语言写的好理由。
最后,c语言很容易入门。 特别是在运行Linux的情况下,因为Linux系统包含GNU C库(glibc ),所以现在可以执行c语言代码。 创建和构建c语言程序所需的任务是安装编译器,打开文本编辑器,然后开始编码。
如果运行的是
开始学习 C 语言
Linux,则可以使用软件包管理器安装c编译器。 在Fedora或RHEL中:$ sudo dnf安装抄送
在Debian及其派生系统中:
$ sudo apt安装构建-基本版
在macOS中,可以安装Homebrew,然后使用它来安装通用抄送。
$ brew安装抄送
在Windows上,可以使用MinGW安装包括GCC在内的最小GNU实用程序集。
在Linux或macOS上验证您安装的GCC :
$ GCC--版本
美国全国广播公司(GCC ) x.y.z
版权所有20xx自由软件基金,Inc。
在Windows上,提供EXE文件的完整路径。
PSC :mingwml DCTgcc.exe--版本
谷歌公司(mingw.orggccbuild-2 ) x.y
z Copyright (C) 20XX Free Software Foundation, Inc.C 语法
C 语言不是一种脚本语言。它是一种编译型语言,这意味着它由 C 编译器处理来产生一个二进制可执行文件。这不同于脚本语言(如 Bash )或混合型语言(如 Python )。
在 C 语言中,你可以创建函数来执行你希望做到的任务。默认情况下,执行的是一个名为 main 的函数。
这里是一个使用 C 语言写的简单的 “hello world” 程序:
#include <stdio.h> int main() { printf("Hello world"); return 0; }第一行包含一个被称为 stdio.h(标准输入和输出)的 头文件,它基本上是自由使用的、非常初级的 C 语言代码,你可以在你自己的程序中重复使用它。然后创建了一个由一条基本的输出语句构成的名为 main 的函数。保存这些文本到一个被称为 hello.c 的文件中,然后使用 GCC 编译它:
$ gcc hello.c --output hello尝试运行你的 C 语言程序:
$ ./hello Hello world$返回值
这是 Unix 哲学的一部分,一个函数在执行后“返回”一些东西:在成功时不返回任何东西,在失败时返回其它的一些东西(例如,一个错误信息)。这些返回的内容通常使用数字(确切地说是整数)表示:0 表示没有错误,任何大于 0 的数字都表示一些不成功的状态。
Unix 和 Linux 被设计成在运行成功时保持沉默是很明智的。这是为了让你在执行一系列命令时,假设没有任何错误或警告会妨碍你的工作,从而可以始终为成功执行做准备。类似地,在 C 语言中的函数在设计上也预期不出现错误。
你可以通过一个小的修改,让你的程序看起来是失败的,就可以看到这一点:
include <stdio.h> int main() { printf("Hello world"); return 1; }编译它:
$ gcc hello.c --output failer现在使用一个内置的 Linux 测试方式来运行它。仅在成功时,&& 操作符才会执行一个命令的第二部分。例如:
$ echo "success" && echo "it worked" success it worked在失败时,|| 测试会执行一个命令的第二部分。
$ ls blah || echo "it did not work" ls: cannot access 'blah': No such file or directory it did not work现在,尝试你的程序,在成功时,它不返回 0;而是返回 1:
$ ./failer && echo "it worked" String is: hello这个程序成功地执行了,但是没有触发第二个命令。
变量和类型
在一些语言中,你可以创建变量而不具体指定变量所包含的数据的类型。这些语言如此设计使得解释器需要对一个变量运行一些测试来视图发现变量是什么样的数据类型。例如,var=1 定义了一个整型数,chdzc创建一个表达式将 var 与某些东西相加时,Python 知道显然它是一个整型数。它同样知道chdzc连接 hello 和 world 时,单词 world 是一个字符串。
C 语言不会为你做任何这些识别和调查;你必须自己定义你的变量类型。这里有几种变量类型,包括整型(int),字符型(char),浮点型(float),布尔型(boolean)。
你可能也注意到这里没有字符串类型。与 Python 和 Java 和 Lua 以及其它的编程语言不同,C 语言没有字符串类型,而是将字符串看作一个字符数组。
这里是一些简单的代码,它建立了一个 char 数组变量,然后使用 printf 将数组变量和一段简单的信息打印到你的屏幕上:
#include <stdio.h> int main() { char var[6] = "hello"; printf("Your string is: %srn",var); }你可能会注意到,这个代码示例向一个由五个字母组成的单词提供了六个字符的空间。这是因为在字符串的结尾有处一个隐藏的终止符,它占用了数组中的一个字节。你可以通过编译和执行代码来运行它:
$ gcc hello.c --output hello $ ./hello hello函数
和其它的编程语言一样,C 函数也接受可选的参数。你可以通过定义你希望函数接受的数据类型,来将参数从一个函数传递到另一个函数:
#include <stdio.h> int printmsg(char a[]) { printf("String is: %srn",a); } int main() { char a[6] = "hello"; printmsg(a); return 0; }简单地将一个函数分解为两个函数的这种方法并不是非常有用,但是它演示了默认运行 main 函数以及如何在函数之间传递数据。
条件语句
在真实的编程中,你通常希望你的代码根据数据做出判断。这是使用条件语句完成的,if 语句是其中最基础的一个语句。
为了使这个示例程序更具动态性,你可以包含 string.h 头文件,顾名思义,它包含用于检查字符串的代码。尝试使用来自 string.h 文件中的 strlen 函数测试传递给 printmsg 函数的字符串是否大于 0:
#include <stdio.h> #include <string.h> int printmsg(char a[]) { size_t len = strlen(a); if ( len > 0) { printf("String is: %srn",a); } } int main() { char a[6] = "hello"; printmsg(a); return 1; }正如在这个示例中所实现的,该条件永远都不会是非真的,因为所提供的字符串总是 hello,它的长度总是大于 0。这个不够认真的重新实现的 echo 命令的最后一点要做是接受来自用户的输入。
命令参数
stdio.h 文件包含的代码在每次程序启动时提供了两个参数: 一个是命令中包含多少项的计数(argc),一个是包含每个项的数组(argv)。例如, 假设你发出这个虚构的命令:
$ foo -i barargc 是 3,argv 的内容是:
argv[0] = fooargv[1] = -iargv[2] = bar你可以修改示例 C 语言程序来以字符串方式接受 argv[2],而不是默认的 hello 吗?
命令式编程语言
C 语言是一种命令式编程语言。它不是面向对象的,也没有类结构。使用 C 语言的经验可以教你很多关于如何处理数据,以及如何更好地管理你的代码运行时生成的数据。多使用 C 语言,你最后能够编写出其它语言(例如 Python 和 Lua)可以使用的库。
想要了解更多关于 C 的知识,你需要使用它。在 /usr/include/ 中查找有用的 C 语言头文件,并且看看你可以做什么小任务来使 C 语言对你有用。在学习的过程中,使用来自 FreeDOS 的 Jim Hall 编写的 C 语言忘备录 。它在一张双面纸忘备录上放置了所有的基本要素,所以在你练习时,可以立即访问 C 语言语法的所有要素。
via: opensource.com
作者: Seth Kenlon 选题: lujun9972 译者: robsean 校对: wxy
本文由 LCTT 原创编译, Linux中国 荣誉推出