LINUX C中用define定义可变参数的宏
一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别.
1. __VA_ARGS__
__VA_ARGS__ 将 "..." 传递给宏 . 如
#define debug(format, ...) fprintf(stderr, format, __VA_ARGS__)
2. GCC的复杂宏
GCC使用一种不同的语法,从而可以给可变参数一个名字,如同其它参数一样.
#define debug(format, args...) fprintf (stderr, format, args)
这和第一条的宏例子是完全一样的,但是这么写可读性更强并且更容易进行描述.
3. ##__VA_ARGS__
上面两个定义的宏,如果出现 debug("A Message")的时候,由于宏展开后有个多余的逗号,所以将导致编译错误.
为了解决这个问题,CPP 使用一个特殊的"##"操作,格式如下:
#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
这里,如果可变参数被忽略或为空,"##"操作将使预处理器(preprocessor)去除掉它前面的那个逗号.
相关文档:
/*
kmalloc can apply 128KB memory only. This func support any continous memory allocate more than 2MB.
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kallsyms.h>
#define KMEM_PAGES &nb ......
http://www.faqs.org/docs/kernel/
的11和12再试试。
Linux 内核的WorkQueues API做了修改
WorkQueue机制允许内核代码在晚一点的时间执行。Workqueue通过存在的一个或者多个专门的进程实现,去执行队列工作。因为在进程的上下文汇总执行,因此如果需要,其可以sleep。WorkQueue也可以延迟特定时间 ......
--这里所有的perl技术问题都是我平常处理数据的时候要用到的,可能不是很强的程序,但是希望能和热爱perl的同志,一起分享...
在很多情况下,我们需要从远处服务器上下载当天或者昨天生成的日志文件,来查看一些我们需要的东西或者备份。
如果采用了ftp,那么我们 ......
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
#ifdef _WIN32
setlocale(LC_ALL, "chs");
#else
setlocale(LC_ALL, "zh_CN.UTF-8");
#endif
wchar_t KZg[] = {0x6211, 0};
char buf[10] = {0};
wcstombs ......