Tag

C

26 posts

C (/ˈsiː/, as in the letter c) is a general-purpose, imperative computer programming language. It supports structured programming, lexical variable scope and recursion, while a static type system prevents many unintended operations. By design, C provides constructs that map efficiently to typical machine instructions, and therefore it has found lasting use in applications that had formerly been coded in assembly language, including operating systems, as well as various application software for computers ranging from supercomputers to embedded systems.

Code

uuid, a simple introduction

uuid,全称Universally Unique IDentifier,是一种id生成方式,我们使用它来生成一唯一的id. 同时,它也被称为guid. uuid有若干生成方法,本文介绍的是一种基于时间的方法(也就是version 1).协议是rfc4122. 在java中,它是系统内置的class.而在c++中,我们想要实现,其实也不困难.

Code

非阻塞的TCP服务设计

云风在12年写了段代码,讲的是socket server开启一个tcp服务,自己维护一个内存ringbuffer,然后利用epoll/kevent来poll request,自己维护循环收集请求.他的原始代码在此处.

最近抽空看了下代码,发现颇有可观之处,然后就改写下收集到我的工具库里面去.代码可以参考这里

Code

重载中括号操作符, 执行复杂操作

C++可以重载运算符, 其中中括号 "[]", 通常在其它地方用于表示下标的操作符, 重载自然也是用于"获得或者设置某个属性"这么个功能.

最简单的莫过于返回一个地址, 做的操作自然都被看光了.

C++
class Opol {
 public:
    Opol() {
        memset(a,0,10);
    }

    int & operator [] (int k) {
        return a[k];
    }
 private:
    int a[10];
}

Life

这样是否会导致男女比例失衡?

网上谈论到当今社会男女比例失调,有人说到一个问题,某些地方政策是,夫妻俩生育一个孩子后,如果是女的就可以再生一个,如果是男的,就不能继续了。这导致了男女比例失调。 然而,立马有人反对说,这件事对全社会影响比例非常小。

Code

QString, std::string 和 const char * 的互相转换

好多人都喜欢重新造一个轮子, 所以这个世界上的的轮子千奇百怪. 作为在这些轮子下面苟延残喘的洒家,往往不得不无尽的寻找两个轮子之间转换的方法. STL库, 作为标准库, 在写C++的时候理所当然的, 被各种使用. const char * 数组, 作为和C一起过来的小伙伴, 在很多场合下也会被调用. 如果脑抽居然还打算使用Qt, 那么,Qt自带的QString, 恐怕也很难有人能完全不使用. 于是乎, 类型转换就是个问题了.

Code

callback 用法简介

callback,函数的回调,从ANSI C开始,一直被广为使用。无论是windows API的所谓消息机制,动态链接库的调用,还是sqlite的命令,gcc下的pthread,qsort。callback都在其中起着难以替代的作用。

Code

做个图结构

STL库提供了很多很好用的容器,但是没有图.但实际上,我们是常常要用到图的. 前几天居然做梦用写了个图,为了响应心的呼唤,所以写了个带有一些基本功能的图,以后有需求再扩充. 图使用vector作为容器,存放采用邻接表的格式.而图的内容采用模板,这样可以自定义一些奇怪的类型放到里面. 这样,可以给图的每个节点定义一个Node,Node包括位置(这儿写死了是一个二维的int类型的坐标)和一个存放数据的使用模板的data.

Code

管道文件的使用:读取命令的输出

stdlib 库有个很多人用过的函数:system.

如果希望这段代码能够跨平台,而希望让程序能等个1秒,一个很好的方法就是,system("sleep 1");这样,无论是windows还是linux,我们都可以很好的执行"等待1秒",而不必多写好多参数什么的.

但是,有时候,我们希望能够得到这个命令的输出,而不是只是"执行它".那么,我们需要点新的东西了.

Code

warning: suggest parentheses around assignment used as truth value

使用C代码遍历获得内容的时候,我写了如下的代码

C
...
MYSQL_RES *mysqlres = mysql_store_result(&conn);
MYSQL_ROW row;
while(row = mysql_fetch_row(mysqlres))
{
....
}

然后gcc报warning

dbcon.cc:103:38: 
warning: suggest parentheses around assignment used as truth value [-Wparentheses]

Code

数独问题的解决

前些日子,有人网上说解决了什么最难数独什么的,然后下面一片欢呼 -- 我看了下所谓题目,无非一个普通的9*9的小题目而已,机器完全可以轻松遍历。 感觉很不可思议 -- 在这种信息时代,计算机能轻松遍历的东西,就不算什么难题,让人闲暇时候玩玩就算了,拿来当作学术成就什么来炫耀,实在有些。。。坐什么观什么了。

Code

一个bug的fix记录:跨文件的追踪

某个C文件又添加一个新的头文件,rebuild这个工程,结果此C文件报错。

Bash
src/xxxx.c: In function ‘foo’:
src/xxxx.c:27:1: error: parameter ‘some_pp’ is initialized
src/xxxx.c:27:1: warning: initialization from incompatible pointer type [enabled by default]