在C中,一个长的printf语句可以分成多行吗?

时间:2009-11-17 21:48:37

标签: c printf

我有以下声明:

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", sp->name, sp->args, sp->value, sp->arraysize);

我想要分手。我尝试了以下但它不起作用。

printf("name: %s\t
args: %s\t
value %d\t
arraysize %d\n", 
sp->name, 
sp->args, 
sp->value, 
sp->arraysize);

我该如何分手?

5 个答案:

答案 0 :(得分:148)

如果要将字符串文字分成多行,可以将多个字符串连接在一起,每行一个,如下所示:

printf("name: %s\t"
"args: %s\t"
"value %d\t"
"arraysize %d\n", 
sp->name, 
sp->args, 
sp->value, 
sp->arraysize);

答案 1 :(得分:19)

其他一些格式选项:

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", 
        a,        b,        c,        d);

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", 
              a,        b,        c,            d);

printf("name: %s\t"      "args: %s\t"      "value %d\t"      "arraysize %d\n", 
        very_long_name_a, very_long_name_b, very_long_name_c, very_long_name_d);

您可以在主题上添加变体。我们的想法是printf()转换speficiers和各自的变量都排成一行“很好”(对于某些“很好”的值)。

答案 2 :(得分:17)

C编译器可以将相邻的字符串文字粘合成一个,如

printf("foo: %s "
       "bar: %d", foo, bar);

预处理器可以使用反斜杠作为行的最后一个字符,不计算CR(或CR / LF,如果您来自Windowsland):

printf("foo %s \
bar: %d", foo, bar);

答案 3 :(得分:3)

我不认为使用一个printf语句打印字符串文字,如上所示是一个很好的编程习惯;相反,人们可以使用下面的代码:

printf("name: %s\t",sp->name);
printf("args: %s\t",sp->args);
printf("value: %s\t",sp->value);
printf("arraysize: %s\t",sp->name); 

答案 4 :(得分:3)

在C中拆分复杂函数的事实上的标准方法是每个参数:

printf("name: %s\targs: %s\tvalue %d\tarraysize %d\n", 
       sp->name, 
       sp->args, 
       sp->value, 
       sp->arraysize);

或者如果你愿意:

const char format_str[] = "name: %s\targs: %s\tvalue %d\tarraysize %d\n";
...
printf(format_str, 
       sp->name, 
       sp->args, 
       sp->value, 
       sp->arraysize);

您不应该拆分字符串,也不应该使用\来破坏C行。这样的代码很快变得完全不可读/不可维护。