随笔分类 - C
摘要:偶遇std::sort的segment fault的,不知如何下手,心中还在思考是不是编译器的bug,搜索了下才发现,compare函数不正确时,还真是可能segment fault, 具体就是 compare(a, b) 函数,a<b和b<a不能同时为true,否则std::sort就会越界,导致
阅读全文
摘要:来自 stackoverflow find_program(CCACHE_PROGRAM ccache) if (CCACHE_PROGRAM) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") endif (
阅读全文
摘要:工作这么多年,一直认为char是有符号的,而事实上gcc和vs默认也是有符号,但是c规范里实际并没有指明char是有符号还是无符号,所以char比较特殊, char signed char unsigned char 是三种数据类型,与int等是不一样的,int就等效为signed int。 gcc
阅读全文
摘要:cmake_minimum_required(VERSION 2.8) if (${ARM}) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_STAGING_PREFIX $ENV{HOME}/dev/k
阅读全文
摘要:http://preshing.com/20170522/learn-cmakes-scripting-language-in-15-minutes/
阅读全文
摘要:有些时候,我们只想定义函数,却不想手动调用函数,而是希望这些函数在系统上电时自动调用。比如在写设备驱动时,设备的初始化函数就是这样一种函数,我们希望所有设备在上电的时候被初始化,每次增加一个设备时,不需要想着去调用这个函数,定义完之后,自己就被加入到设备初始化函数集中。解决的方案有很多,比如写个预处理脚本,把特定格式声明的函数扫描上来,生成一个数组,然后统一调用,不过,这里有另一种解决方法:为每一个函数定义一个指针变量,然后将这个指针变量放到特定的section中,链接器最终会把同名的section组合到一起,即自动生成一个函数指针数组,访问链接器生成的符号即可。typedef void(*D
阅读全文
摘要:CMake-5 调试转自 http://cttmayi.blog.cd/2011/01/23/cmake-5-%E8%B0%83%E8%AF%95/ 调试makefile,感觉比较好用的一个命令就是make --just-print (及make -n).他们打印makefile的整个流程,可以协助分析编译过程.虽然CMake也产生makefile,来完成编译的工作,但产生的makefile中频繁的调用cmake -E(cmake的命令模式),导致你如果不熟悉命令的细节的话,用make -n命令也无法了解其中编译的过程.于是还是我还是先开始尝试cmake自己的一些调试命令,或许比较容易1. c
阅读全文
摘要:C语言没有像Java那样的try catch处理异常错误的能力,不过可以用setjmp和longjmp两个函数实现错误处理的基本逻辑。setjmp(BUFFER)会将程序当前的寄存器状态保存到BUFFER数组里,这个数组用jmp_buf定义:#include <setjmp.h>
jmp_buf BUFFER;longjmp(BUFFER, n)将程序流跳到setjmp的位置,同时恢复BUFFER中保存的状态。第二个参数n为一个整数,当通过longjmp(BUFFER, n)跳转到setjmp位置时,setjmp函数的返回值为n;否则,如果是直接执行setjmp,则返回为零。根据这
阅读全文

浙公网安备 33010602011771号