如何阅读 C 语言的声明

众所周知,C 语言的一大难点就在于变量声明。 比如说如下的几个例子: char* const *(*next)(); char *(*c[10])(int **p); void (*signal(int, void(*)(int)))(int); 基本上每一个都是晦涩难懂,看了简直像杀人。但其实也是相对来会所比较简单的一个。如果熟悉编译原理,其实可以通过人脑编译器的手段来解决难懂问题。毕竟,代码也需要编译器进行翻译。 首先我们得知道运算符号的优先级顺序。这里只说在声明期间会出现的符号。主要分为变量名,括号内内容,后缀操作符如:[], (),前缀操作符如: *,类型描述符如:const, volatile, 其中, 如果 const…

JSON 解析器

这篇博客主要是最近开始玩 C,所以准备找个东西练手,突然发现,顺手写个 JSON 解析器吧。于是就开始了。 相对于其他比较成熟的上层语言。C 主要的问题就是没有基础的数据结构,而且相对于弱类型语言而言,C 的类型在解析的时候有个类型转换的坑。但是相对于其他的强类型语言而言,C 又有一个好处,那就是没有一个 void* 解决不了的问题,如果有,那就用两个。 不过相对于工作时的清闲,现在上课的时候确实没有什么时间进行额外的代码编写。所以断断续续写了一周多。 主要的使用方法就是: struct value *val = parse_new(); char *json1 =…

C 的假装 OOP 写法

之前微博上说 C 的一个好处就是没有什么是一个 void* 解决不了的,然后因为自己用 C 写一个小程序,遇到了一个问题,就是因为 C 是强类型,但是如果需要写一个相对通用的数据结构。这个稍微有点麻烦。 比如说,hashmap,我们常用的都是 <string, string> 的一个 map,于是,相对来说的话,hash 函数比较容易。但是,如果是需要实现 Java 那样的通用数据结构呢,是不是需要对每个特定的数据对象写一个? 所以这边就扯到了这么个比较好玩的技巧。 先看下效果: main.c…

VIM 浏览器预览插件

插件的地址:GITHUB. 写这个插件的原因很简单。因为之前一直再写一个页面,因为在主力的编辑器是 VIM,所以就顺手用了。但是遇到一个很尴尬的地方,就是在想观看编写的效果的时候,常常会需要使用 Finder,然后进入当前的工作目录,然后双击 html 文件。 非常痛苦。于是去查了下 vim 有没有这么一个插件,可以方便的进行浏览器预览的。 当然也是查到了相关的方式,比如这篇博客: ” 在浏览器预览 for win32 function! ViewInBrowser(name) let file = expand(“%:p”)…