我怎么解释这个宏?

时间:2016-09-10 06:13:48

标签: c++

我真的很想知道soap_strcpy的返回值是多少?

# define soap_strcpy(buf, len, src) (void)((buf) && (size_t)(len) > 0 && (strncpy((buf), (src), (len) - 1), (buf)[(len) - 1] = '\0'))

我的工具报告返回值始终为false。 下面的最后一个条件是一种通常的表达方式?我怎么解释呢?

(strncpy((buf), (src), (len) - 1), (buf)[(len) - 1] = '\0'))

1 个答案:

答案 0 :(得分:0)

  

(strncpy((buf),(src),(len) - 1),(buf)[(len) - 1] ='\ 0'))

Comma operator?现在更清楚了吗?

表达式列表,逗号分隔,表达式的值是评估列表中最后一个表达式的值。

由于你的最后一个表达式是零赋值,当然它总是为零。这并不意味着对整个列表的评估是无用的:第一学期副本,最后一个术语终止具有零字符的副本。