66. 数组和指针笔记

1. 有时需要把数组设置为只读。这样,程序只能从数组中检索值,不能把新值写入数组。要创建只读数组,应该用const声明和初始化数组。
const int days[MONTHS]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

这样修改后,程序在运行过程中就不能修改该数组中的内容。和普通变量一样,应该使用声明来初始化const数据,因为一旦声明为const,便不能再给它赋值。

2. 使用数组前必须先初始化它。与普通变量类似,在使用数组元素之前,必须先给它们赋初值。编译器使用的值是内存相应位置上的现有值。

使用未被初始化的变量:

#include <stdio.h>
#define SIZE 5

int main(void)
{
    int data[SIZE];

    printf("%2s%14s\n", "i", "data[i]");

    for (int i = 0; i < SIZE; ++i) {
        printf("%2d%14d\n", i, data[i]);
    }

    return 0;
}
zhgxun-pro:c2 zhgxun$ gcc test.c 
zhgxun-pro:c2 zhgxun$ ./a.out 
 i       data[i]
 0             0
 1             0
 2             0
 3             0
 4    1600449552
zhgxun-pro:c2 zhgxun$

Read More

65. C Prime Plus 笔记-2017.12.16

1. C语言在提供更多自由的同时,也让使用者承担了更大的责任。
2. 想拥有自由就必须时刻保持警惕。C语言紧凑简洁,结合了大量的运算载体。正因如此,我们也可以编写出让人极其费解的代码。虽然没必要强迫自己编写晦涩的代码,但是有兴趣写写也无妨。
3. 编译器把源代码转换成中间代码,链接器把中间代码和其它代码合并,生成可执行文件。C使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。通过这种方法,如果只更改某个模块,不必因此重新编译其他模块。另外,链接器还将你编写的程序和预编译的库代码合并。
4. 链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码3部分合并成一个文件,即可执行文件。对于库代码,链接器只会把程序中要用到的库函数代码提取出来。
5. LLVM项目成为cc的另一个替代品。该项目是与编译器相关的开源软件集合,始于伊利诺伊大学的2000份研究项目。它的Clang编译器处理C代码,可以通过clang调用。有多种版本供不同的平台使用,包括Linux。2012年,Clang成为FreeBSD的默认C编译器。Clang也对最新的C标准支持得很好。

Read More