C 语言简单编程速成( 二 )

尝试运行你的 C 语言程序:
$ ./helloHello world$返回值
这是 Unix 哲学的一部分 , 一个函数在执行后“返回”一些东西:在成功时不返回任何东西 , 在失败时返回其它的一些东西(例如 , 一个错误信息) 。 这些返回的内容通常使用数字(确切地说是整数)表示:0 表示没有错误 , 任何大于 0 的数字都表示一些不成功的状态 。
Unix 和 Linux 被设计成在运行成功时保持沉默是很明智的 。 这是为了让你在执行一系列命令时 , 假设没有任何错误或警告会妨碍你的工作 , 从而可以始终为成功执行做准备 。 类似地 , 在 C 语言中的函数在设计上也预期不出现错误 。
你可以通过一个小的修改 , 让你的程序看起来是失败的 , 就可以看到这一点:
include int main() {printf("Hello world");return 1;}编译它:
$ gcc hello.c --output failer现在使用一个内置的 Linux 测试方式来运行它 。 仅在成功时 ,--tt-darkmode-color: #42962A;">失败时 , || 测试会执行一个命令的第二部分 。
$ ls blah || echo "it did not work"ls: cannot access 'blah': No such file or directoryit did not work现在 , 尝试你的程序 , 在成功时 , 它返回 0;而是返回 1:
$ ./failer--tt-darkmode-color: #42962A;">类型 。 这些语言如此设计使得解释器需要对一个变量运行一些测试来视图发现变量是什么样的数据类型 。 例如 , var=1 定义了一个整型数 , 当你创建一个表达式将 var 与某些东西相加时 , Python 知道显然它是一个整型数 。 它同样知道当你连接 hello 和 world 时 , 单词 world 是一个字符串 。
C 语言不会为你做任何这些识别和调查;你必须自己定义你的变量类型 。 这里有几种变量类型 , 包括整型(int) , 字符型(char) , 浮点型(float) , 布尔型(boolean) 。
你可能也注意到这里没有字符串类型 。 与 Python 和 Java 和 Lua 以及其它的编程语言不同 , C 语言没有字符串类型 , 而是将字符串看作一个字符数组 。
这里是一些简单的代码 , 它建立了一个 char 数组变量 , 然后使用 printf 将数组变量和一段简单的信息打印到你的屏幕上:
#include int main() {char var[6] = "hello";printf("Your string is: %s\r\n",var);}你可能会注意到 , 这个代码示例向一个由五个字母组成的单词提供了六个字符的空间 。 这是因为在字符串的结尾有处一个隐藏的终止符 , 它占用了数组中的一个字节 。 你可以通过编译和执行代码来运行它:
$ gcc hello.c --output hello$ ./hellohello函数和其它的编程语言一样 , C 函数也接受可选的参数 。 你可以通过定义你希望函数接受的数据类型 , 来将参数从一个函数传递到另一个函数:
#include int printmsg(char a[]) {printf("String is: %s\r\n",a);}int main() {char a[6] = "hello";printmsg(a);return 0;}简单地将一个函数分解为两个函数的这种方法并不是非常有用 , 但是它演示了默认运行 main 函数以及如何在函数之间传递数据 。
条件语句在真实的编程中 , 你通常希望你的代码根据数据做出判断 。 这是使用条件语句完成的 , if 语句是其中最基础的一个语句 。
为了使这个示例程序更具动态性 , 你可以包含 string.h 头文件 , 顾名思义 , 它包含用于检查字符串的代码 。 尝试使用来自 string.h 文件中的 strlen 函数测试传递给 printmsg 函数的字符串是否大于 0:
#include #include int printmsg(char a[]) {size_t len = strlen(a);if ( len > 0) {printf("String is: %s\r\n",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] = foo
  • argv[1] = -i
  • argv[2] = bar
你可以修改示例 C 语言程序来以字符串方式接受 argv[2] , 而不是默认的 hello 吗?
命令式编程语言C 语言是一种命令式编程语言 。 它不是面向对象的 , 也没有类结构 。 使用 C 语言的经验可以教你很多关于如何处理数据 , 以及如何更好地管理你的代码运行时生成的数据 。 多使用 C 语言 , 你最后能够编写出其它语言(例如 Python 和 Lua)可以使用的库 。