易截截图软件、单文件、免安装、纯绿色、仅160KB

请教c高手,define的问题

各位大侠,小弟有一个问题请教,如下
这个 #define stack_push 是一个函数,调用是这样的

int len;
stack_t *stack;
const char *curpos;
int seglen;
const char *next_slash;
int i;
---------
以上是变量的定义。

if (stack_push(curpos, const char *, stack) < 0 || stack_push(next_slash - curpos + 1, int, stack) < 0)
{
stack_destroy(stack);
return -1;
}


众大哥大姐们,我的问题不是这个调用,而是下面的这个宏定义我有个地方看不明白,就是||后面的部分 ,尤其是*((type *)(stack)->top)++ = (elem), 这部分,真的是看不明白,请各位高手指教一下吧。谢谢。

实际上这个是个表达式,但是(elem), 这个地方,就看不明白了,怎么替换好像都不对。高手帮我解释一下这段代码吧

#define stack_push(elem, type, stack) \
({ \
(stack)->top + sizeof (type) <= (stack)->base + (stack)->size || \
__stack_expand(stack, sizeof (type)) >= 0 ? \
*((type *)(stack)->top)++ = (elem), (stack)->top - (stack)->base : -1;    \
})


/* Never call the following function directly. */
int __stack_expand(stack_t *stack, unsigned int esize);

其实就是个?:表达式
?判断的条件是(stack)->top + sizeof (type) <= (stack)->base + (stack)->size 或者
__stack_expand(stack, sizeof (type)) >= 0

如果这两个表达式至少有一


相关问答:

execl怎么调用java程序 - C/C++ / C语言

如题,C/C++中的execl怎么调用写好的java程序,
execl("/opt/java1.5/bin/java","MyClass",NULL);
这样的不行哦。

不会.

运行java程序
找工具查看一下那个程序的命令行

搜索下:jni ......

c# listview添加合计行 - .NET技术 / C#

用listview显示出从数据库中查询出的记录,想在最后记录后面添加一条合计行,如何实现!谢谢大家!
绑定数据你应该没问题吧,绑定完以后用一个循环把你要统计数据的列中的数据总和用一个变量接受,然后在循环外面ne ......

c 语言里浮点相乘 为什么小数全为0了 - C/C++ / C语言

如题:c 语言里浮点相乘 为什么小数全为0了
float x=8266.206055;
float y=7226.922363;
float z;
z=x*y;
z=59739228.000000;
为什么得到的Z 小数点后面全为0了
呵呵,超出浮点能表示范围了。

麻烦有人知道 ......

关于 tiny c 段错误的问题 - C/C++ / C语言

小弟最近在了解关于tiny c 的问题。在linux下准备安装。但安装完成后碰到了一些问题。希望大家能够帮忙解决。以下是安装完成后的执行步骤。
[student@localhost ~]$ tcc -v
tcc version 0.9.25
[student@localhos ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号