Browsed by
Category: c/c++

Variable-length Argument Lists

Variable-length Argument Lists

The tricky bit is how minprintf walks along the argument list when the list doesn’t even have a name. The standard header <stdarg.h> contains a set of macro definitions that define how to step through an argument list. The implementation of this header will vary from machine to machine, but the interface it presents is uniform. The type va_list is used to declare a variable that will refer to each argument in turn; in minprintf, this variable is called ap,…

Read More Read More

typedef in c

typedef in c

以前看c的书,总是在说,typedef是创建一种自定义定义类型,然后就开始举若干例子,让人产生这样的错觉,就是typedef就像define一样,是把自己定义的类型字符去替换以后的字符,事实上,typedef在语法上和static,extern一样,是一种前缀。   例如:typedef int TInt;   这种类型的用法,就会让人明显感到以后出现TInt的地方,就用int来替换,是不是跟define一样呢?可是如果这样的定义:   typedef int *PInt;   这种又如何解释呢?   更进一步的,这样的: typedef int (*PFI)(char *, char *); 怎么办,完全不能理解了,不是么?这个时候,就像前面说的,把typedef先拿开,不正是一个申明FPI的函数指针么,以后就明白了,凡是用FPI定义的类型,都是这种的函数指针变量,甚至就可以把FPI字符换成你定义的字符,到typedef这句里面来理解,所以,说typedef像define,可是处理时,要说明替换的地方,是定义的字符,另外注意,这里用define只是帮助理解,typedef并非预编译命令。

结构体数组的初始化

结构体数组的初始化

在c中,原来还能这么用,又孤陋寡闻了一把。    struct key {       char *word;       int count;   } keytab[] = {       "auto", 0,       "break", 0,       "case", 0,       "char", 0,       "const", 0,       "continue", 0,       "default", 0,       /* … */       "unsigned", 0,       "void", 0,       "volatile", 0,       "while", 0   }; 当然,上面的用法在结构体中数据成员不多的情况能够做到清晰明了,否则,就换成这么用: { "auto", 0 }, { "break", 0 }, { "case", 0 }, …

Preprocessor "#" 用法

Preprocessor "#" 用法

Formal parameters are not replaced within quoted strings. If, however, a parameter name is preceded by a # in the replacement text, the combination will be expanded into a quoted string with the parameter replaced by the actual argument. This can be combined with string concatenation to make, for example, a debugging print macro: #define dprint(expr) printf(#expr " = %gn", expr) When this is invoked, as in dprint(x/y) the macro is expanded into printf("x/y" " = &gn", x/y); and the…

Read More Read More

c++中关于++的特殊情况

c++中关于++的特殊情况

int x = 4;x+=x-=x–;cout << x; 输出的结果是-1 int x = 4;x+=x-=–x;cout << x; 输出的结果是0 为什么呢?在第一个x+=x-=x–;运算中,–符号运算的优先次序先,不过它是从左到右运算的,不知道为何,在我的编译器里,是运算完所有的项后再进行自减1的过程。去掉–后,表达式变为x+=x-=x;这个表达式中,+=、-=都是同级的,并且是从右往左运算,容易看出其结果x = 0,再加上前面–的自减1,所以输出的结果是-1。 而x+=x-=–x;中,–x是首先进行运算的,所以其结果是x=3,然后表达式变为x+=x-=x,无论当前x为何值,最后x的结果都是0,所以输出的结果自然是0了。

QT 遇到的缺Debug lib问题1则

QT 遇到的缺Debug lib问题1则

问题: 我用QT DESIGNER產生了.ui檔之後,在經過 qmake -project test.ui =>造出a.pro之後 qmake a.pro =>造出了Makefile…..等等檔之後 make =>這裡會出現錯誤 如下!! mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory `D:/a’ g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runt ime-pseudo-reloc -Wl,-subsystem,windows -o "debuga.exe" -L"C:Qt4.0.1lib" – lmingw32 -lqtmaind -lQtCored4 -lQtGuid4 c:mingwbin..libgccmingw323.4.2……..mingw32binld.exe: cannot fin d -lqtmaind collect2: ld returned 1 exit status mingw32-make[1]: *** [debuga.exe] Error 1 mingw32-make[1]: Leaving directory `D:/a’ mingw32-make: *** [debug] Error 2 不知道是為什們??   解答: 這是因為你沒有編譯Qt之Debug的Lib。 安裝完Qt後,在Qt的工作群組裏應該有個 「Qt 4.0.1 (Build Debug Libraries)」的捷徑,點選它, 會跳至Console畫面,接著它會問一個版權的問題,你按 「y」,然後它就開始執行編譯Lib的動作,大約會花個 五小時以上吧!(我猜的,因為我該它自己Run後,就去睡大覺了!) 之後你再編譯程式時,就不會有類似的問題了! ps:編譯Qt程式的指令順序 qmake -project qmake make 若要編譯release版,則最後一個指令改為make…

Read More Read More

fenbei.com歌曲探索器

fenbei.com歌曲探索器

1.简介: fenbei.com有很多好听的歌曲,但是都只能提供在线听,不能下载,为了解决这个问题,就有诞生了这款工具。这个工具可以探索出某个歌曲或某个专辑中所有歌曲的下载地址,并导出为一个网页Html文件,打开这个生成的文件,点击就可以下载了。(可配合flvExport的批量下载功能,让您下载使用更加便利) 2.截图: 3.使用方法: 3.1 专辑地址 专辑地址是诸如:http://3873309.fenbei.com/Music这样的网页。 3.2 歌曲ID 在打开某个歌曲如http://music.fenbei.com/2870296时,可以看到后面有一串数字2870296,这个就是歌曲的ID。 3.3 操作简介 选中需要的探索方式,在输入框中填入相应的信息(专辑地址/歌曲ID),点击浏览选择一个输出网页的地址,再点击开始按钮就可以了。 探索完成后,打开刚才输出的网页,直接点击就可以下载了。 4.下载: 下载后解压缩,双击feibenDetectiver.exe就可以了,纯绿色软件,无须安装。 070718: http://royelee007.googlepages.com/fenbei.comdownloader