
C
liuwons
混,也是一种追求
展开
-
C中的关系运算符
写程序时,出现了bug,找了半天,定位到了这儿语句: while(read=fread(buffer,1,1024,tempfile)!=0) { ... ... } 调试后发现这里的read老是等于1,即使文件中还有很多字节可读。 仔细分析了一下,发现是因为忽略了运算符的优先级造成的。 在这里,赋值运算符=的优先级要原创 2012-04-27 23:58:32 · 19108 阅读 · 0 评论 -
计算机底层数据的处理方式
编程语言是怎么实现类型转换的,而计算机底层又是怎样处理各种类型数据的呢,好吧,源码说明一切。 code.cint test(){ unsigned char a=129; char b=130; char c=a; int h=a; char d=-2; unsigned char e=d; int i=d; int j=a+d; int k=-3; int l原创 2012-11-30 22:48:14 · 23382 阅读 · 0 评论 -
gcc对于大数的溢出截断
gcc编译器对于大整数常数的溢出截断操作,视为此大整数在更大类型上的补码截断为当前类型。 test.c void test(){ unsigned char a=257; char b=-129; char c=130; char d=255;}D:\>gcc -S test.c -o test.s > test.txttest.c: 在函数‘原创 2012-12-02 16:10:31 · 22403 阅读 · 0 评论 -
const指针与指向const对象的指针
1.const指针是一种指针,此指针指向的地址是不能够改变的,但是其指向的对象是可以被修改的,其定义类似: int* const p=地址; 比如下面的代码:int b=12;int* const a=&b;void tes(){ *a=1;} 此代码是正确的,先声明了变量b,然后声明一个const指针a,此指针指向变量b,在tes函数中修改指针a所指向的原创 2013-01-22 17:54:54 · 23458 阅读 · 0 评论 -
cmake编译opencv程序
用cmake来编译opencv程序还是很方便的。 在D:/test目录下有一个含有opencv api的源文件facedetect.cpp,现要将其编译为DisplayImage.exe程序,首先创建一个文件CMakeLists.txt文件,内容如下:cmake_minimum_required(VERSION 2.8)原创 2013-03-06 20:38:44 · 25720 阅读 · 0 评论 -
用gcc编译opencv程序
opencv是一个开源的视觉库,有很多视觉开发常用方法,这里介绍下如何用gcc编译含有opencv函数的程序。 我的opencv库放在e:/opencv文件夹下。我在d:/test目录下有一个facetest.cpp源程序。现在要通过gcc将它编译链接。 那么可以用如下的命令: g++ -B e:/opencv/build -L e:/opencv/build/x86原创 2013-03-06 12:17:13 · 23940 阅读 · 1 评论 -
关于链接器的链接过程
今天遇到了一个关于链接器的错误,百思不得其解,查阅资料后才得知链接器的链接过程。 以下内容部分摘自《深入理解计算机系统》 unix链接器在解析外部引用时,在符号解析的阶段,链接器从左到右按照它们在编译器驱动程序命令行上出现的相同顺序来扫描可重定位目标文件和库文件。在这次扫描中,链接器维持一个可重定位目标文件的集合E(这个集合中的文件会被合并起来形成可执行文件),一个未被解析的符原创 2013-03-19 23:00:27 · 19762 阅读 · 0 评论 -
关于编译后dll中的函数名
msvc在编译dll时,如果函数声明采用__declspec(dllexport) int add(int,int)的形式,dll中的函数名会是?add@@YAHHH@Z这种形式的。 如果使用如下这种声明,dll中的函数名才会和C++中的函数名一致,为add。extern "C"{DLLTEST_API int add(int, int);}原创 2014-04-18 10:23:34 · 20178 阅读 · 0 评论 -
YUV与RGB的相互转换
YUV到RGB:int C = Y - 16;int D = U - 128;int E = V - 128;int R = 298 * C + 409 * E + 128;int G = 298 * C - 100 * D - 208 * E + 128;int B = 298 * C + 516 * D + 128;RGB到YUV:原创 2014-05-30 20:07:53 · 20451 阅读 · 1 评论 -
ffmpeg解码文件
只贴出部分代码,重在说明过程av_register_all();AVFormatContext* fctx = avformat_alloc_context();int err = avformat_open_input(&fctx, "b.avi", NULL, NULL);printf("open input:%d\n", err);err = avformat_fi原创 2014-12-01 13:29:32 · 19701 阅读 · 0 评论 -
gnu/gcc目录结构
头文件目录: gnuroot/include gnuroot/lib/gcc/mingw32/4.6.2/include原创 2012-11-13 23:17:21 · 19674 阅读 · 0 评论 -
gcc嵌入汇编
具有输入和输出参数的嵌入汇编语句的基本格式为: asm( "汇编语句“ :输出寄存器列表 :输入寄存器列表 :会被修改的寄存器列表 ); asm是嵌入汇编的关键字,“汇编语句”是写汇编指令的地方,“输出寄存器”是指这段嵌入汇编执行完之后,哪些寄存器用于存放输出数据,这些寄存会会分别对应一C语言表达式值或一个内存地址;“输入寄存器原创 2012-09-26 00:20:26 · 19869 阅读 · 0 评论 -
文件读写的实验
今天在读文件读写相关的资料时,感觉很困惑,就自己做了个实验。 1.读取从标准输入中输入的ascii码,代码:#includeint main(){char a;while(1){scanf("%c",&a);int b=a;printf("%d\n",b);}return 0;} 在输入一系列输入数据后得出结论: 可原创 2012-04-29 20:02:54 · 18766 阅读 · 0 评论 -
C 本地脚本的执行
C语言中执行本地脚本命令的接口为system函数。 system函数的原型为: #include int system(const char* command); 该函数会将command命令传递给本地的命令处理器执行,在Windows环境下为DOS命令提示符处理器cmd.exe,在UNIX类系统中则为shell外壳程序。 具体请参照http://原创 2012-05-02 23:14:22 · 18946 阅读 · 0 评论 -
理解多维数组
今天突然发现自己对多维数组的指针的理解出现了偏差,于是做了些实验:#includeint main(){int n[3][3];void print(int *t);int s=0,i,j;printf("%d\n",n);for(i=0;i{ printf("%d\n",n[i]);for(j=0;j{n[原创 2012-04-30 00:53:40 · 19081 阅读 · 1 评论 -
关于编译器和链接器
首先做个试验:test.c:int a;int b=34;int add(int,int);int main(){int c;int d=26;c=add(b,d);return 0;}add.c:int m;int n=65;int add(int x,int y){int j;int k=43;j=x+y;j=原创 2012-05-05 22:37:24 · 18969 阅读 · 0 评论 -
查看gcc的搜索目录
gcc中有查看搜索目录的选项,先利用gcc --help查看所有选项: 可以看到有几个print选项。 查看编译c++文件使用的头文件目录的命令为: `gcc -print-prog-name=cc1plus` -v 如下: 查看编译c文件的头文件搜索目录的命令为 `gcc -print-prog-name=cc1` -v原创 2012-06-06 22:56:19 · 19678 阅读 · 0 评论 -
最短路径算法
有一段时间没写算法了,今天要写一个最短路径算法,居然也用了差不多一个半小时。。。 代码也没什么好说的了,用的回溯逐个探测的方法,变量都用的是全局变量,需要注意的就是回溯了。#include#include#define MAX 50 //图的最大顶点数using namespace std;int map[MAX][MAX]; //图的原创 2012-05-20 21:37:25 · 19157 阅读 · 0 评论 -
回溯小记
论坛上看到一个回溯算法题,这里小记一下。 原题:在3×3个方格的方阵中要填入数字1到N(N≥10)内的某9个数字,每个方格填一个整数,似的所有相邻两个方格内的两个整数之和为质数。试求出所有满足这个要求的各种数字填法。 为了简化代码突出回溯思想,程序中有很多简化了的东西。 代码:#include #include using namespace std;原创 2012-07-04 13:02:56 · 19217 阅读 · 0 评论 -
引用类型--来自C++的扩展
很久没用C,今天复习了下数据结构,用gcc编译,结果出现一堆错误,几乎都是由引用类型引起的,查阅了下资料,才知道C是没有引用类型的,引用类型是来自C++的扩展的。 引用类型相当于是变量的别名,可以利用此别名指向特定变量,引用不会在内存中占用储存变量值的空间。 引用类型不是指针,指针是变量在内存中的地址,而引用只是其它变量的别名而已。原创 2012-09-25 22:59:01 · 18682 阅读 · 0 评论 -
ffmpeg解码内存缓冲区
只贴出部分代码,重在说明过程。与解码文件的大致过程类似,只不过自定义了AVFormatContextstruct IOData { char* data; size_t len; };int FrVideoAcqHT::io_get_data(void *opaque, uint8_t *buf, int buf_size){原创 2014-12-01 13:30:55 · 35063 阅读 · 5 评论