Idle Works, Idle Thoughts

C 语言学习笔记

定义一个结构体:

typedef struct {
    int row;
    int col;
} point;    

定义一个二维数组:

point map[MAX_ROW][MAX_COL];

用malloc()分配一个二维数组内存:

point** map;    

map = (point**) malloc(sizeof(point*) * nrows);
for(int i = 0; i < nrows; ++i) {
    map[i] = (point*) malloc(sizeof(point) * ncols);
}

随机数:

#include <time.h>   
#include <stdlib.h>   
    
srand(time(NULL));
int r = rand();

Bool数值的定义在头文件:

#include <stdbool.h>    

bool selected = false;

selected = true;

C语言中不能使用默认参数值,以下写法不能通过编译:

int create(int r, int c, bool sel = true);

fopen()

C的fopen()函数原型:

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);

其中mode可以为读(r)、写(w)、追加(a),或为读写(r+, w+, a+)。如果在这些参数之外添加一个额外的b,表示以二进制方式读写文件。是否加b,对回车换行意义不同。

Windows上读:

Read LF CRLF
“r” LF LF
“rb” LF CRLF

也就是读到内存时,”r”将把EOL统一为\n,”rb”则保持内存和文件的二进制数据完全一致。

Windows上写:

Write LF CRLF
“w” CRLF CRCRLF
“wb” LF CRLF

也就是写到内存是,”w”将把LF替换为CRLF,因此CRLF就会变为CRCRLF。”wb”则原封不动的把内存的数据dump到文件中,不做任何转换(参考回车和换行)。

参考

C语言入门

GCC学习笔记

用 -c 编译源代码为 .o 文件:

$ gcc -c movie.c    

用 -g 生成调试信息:

$ gcc -g -c movie.c    

GDB学习笔记

首先要在编译时加入调试信息。如 gcc -g

$ gdb ./a.out    
gdb> b main
gdb> r

在Mac终端使用GDB的说明

Makefile学习笔记

Makefile中一定要使用Tab,不能自动转为4个空格。如果不遵守这条愚蠢的规定,那make会拒绝为你服务。

基本格式:

目标 : 依赖    
    动作