在printf参数列表中使用( )。这个语法是什么意思?

5
我遇到了这样的一段代码:
printf("\tout:\t%-14.14s\n", (sprintf(tmpbuf[0], "[%s]", mystring), tmpbuf[0]));
括号里的那一句话是什么意思,它涉及到sprintf函数?

2
请不要在生产代码中这样做。 - Alexandre C.
我能理解你不喜欢这段代码,但它为什么在生产环境中不太适用呢? - Michael Krelin - hacker
3
@MichaelKrelin-hacker:这让人感到惊讶。 - Alexandre C.
1
那么,生产环境和开发环境的区别在于,在生产环境中人们不会感到惊讶吗?我的意思是,在生产环境中,人们通常甚至看不到代码 ;) - Michael Krelin - hacker
@MichaelKrelin,开发人员编写代码时通常是为了生产环境。因此,AlexandreC的评论也适用于此。如果您只是为了完成某些事情而编写临时性质的代码,则无所谓。但是,如果该代码需要维护...请编写易于阅读的代码。 - Brian White
显示剩余4条评论
1个回答

10

这是一个涉及逗号运算符的表达式,将以下内容放入单行:

sprintf(tmpbuf[0], "[%s]", mystring);
printf("\tout:\t%-14.14s\n", tmpbuf[0]);

逗号运算符会同时计算两个参数,并返回右侧的参数,即tmpbuf[0]

5
这是编写代码的正常方式。除非你参加IOCCC,否则应仅使用原始代码。 - nos
1
@aleroot:那个表达式里有一个逗号。 - Andriy
2
@hasnobrains:除了理解 C 语言之外,没有其他文档可以参考。将表达式分解成越来越小的片段,直到你理解它们的作用或知道要问什么问题为止。 - Kerrek SB
@KerrekSB:我已经用C语言写了大约10年了 :) 但是偶尔我会遇到一些像Alexanre C所说的那样令人惊讶的代码片段。所以我想知道是否有一本C语言烹饪书,那些编写这些代码的人都读过 :) - hasnobrains

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接