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)去除掉它前面的那个逗号.
相关文档:
以前已经接触Windows下的Socket编程,最近也尝试着再linux下使用Socket编程,下面是在网上找的例子(已经测试过)
tcp_server.c:
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
# ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
一个
Linux
发行版,体积很小,用处反而很大。此话当真?
一般而言,老式计算机内存都不大, ......
一边学习ubuntu,一边发现问题,目前发现的问题有以下几个,并成功解决。
首先,打开firefox,flash不能正确显示,安装adobe flash 最新插件就可以解决,其他flash插件效果不太好。后来打开QQ农场的flash,中文显示空格,解决方法,打开终端,输入以下命令: ......
1.在Linux启动脚本中制作jffs2
2.在Linux终端下制作jffs2
3.备注
1.在Linux启动脚本中制作jffs2
具体操作步骤:
sysinit中:
echo “Make jffs2 filesystem:”
erase /dev/mtd5
cd /tmp
echo “test” > test.txt
mkfs.jffs2 –d /tmp > /dev/mtdblock5
&nbs ......
Linux下C语言编程基础(Makefile)
2005-01-18 10:28:23 来自:赛迪网
假设我们有下面这样的一个程序,源代码如下:
/* main.c */
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print(&q ......