English 中文(简体)
In C can a long printf statement be broken up into multiple lines?
原标题:
  • 时间:2009-11-17 21:48:36
  •  标签:
  • c
  • printf

I have the following statement:

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

I want to break it up. I tried the following but it doesn t work.

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

How can I break it up?

最佳回答

If you want to break a string literal onto multiple lines, you can concatenate multiple strings together, one on each line, like so:

printf("name: %s	"
"args: %s	"
"value %d	"
"arraysize %d
", 
sp->name, 
sp->args, 
sp->value, 
sp->arraysize);
问题回答

The C compiler can glue adjacent string literals into one, like

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

The preprocessor can use a backslash as a last character of the line, not counting CR (or CR/LF, if you are from Windowsland):

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

Just some other formatting options:

printf("name: %s	args: %s	value %d	arraysize %d
", 
        a,        b,        c,        d);

printf("name: %s	args: %s	value %d	arraysize %d
", 
              a,        b,        c,            d);

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

You can add variations on the theme. The idea is that the printf() conversion speficiers and the respective variables are all lined up "nicely" (for some values of "nicely").

The de-facto standard way to split up complex functions in C is per argument:

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

Or if you will:

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

You shouldn t split up the string, nor should you use to break a C line. Such code quickly turns completely unreadable/unmaintainable.

I don t think using one printf statement to print string literals as seen above is a good programming practice; rather, one can use the piece of code below:

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




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签