问题
Sometimes, when I have a multi-case if, or a very simple for, with only two statements, I will forgo braces, instead using the comma. Is this a bad exploitation of the feature, and is it ugly and bad form? Or is it an acceptable way to save time and space?
For example:
if (something)
b = y, c = z--;
instead of:
if (something) {
b = y;
c = z--;
}
回答1:
It's indeed a clever way to use that syntactic feature of most C-like languages.
Personally, I try to stay the least ambiguous as possible when I code, so I always include { and } in all of my if statements. It may save time, but I prefer clarity: it doesn't speed up or slow down the code execution.
回答2:
I'd vote against it for a few reasons:
- It's hard to immediately see, just at a glance, that there's more than one assignment.
- I'm in favor of always putting in braces, because there are times where it's convenient to go back through, e.g. during debugging, and add code that also gets executed in that block.
- It's not really saving a lot. The compiler is going to spit out the same code. It won't save you any noticeable compile time. When distributing the file, it won't compress significantly better.
回答3:
It won't save more than a few moments of typing time.
If you really need to save space on screen that much, you need a bigger screen (or you should run a bigger terminal window).
It makes no difference to the object code produced. Therefore, it has no affect on runtime.
It is harder to step through the component statements of a comma expression in a debugger.
I think it is easier to read the colon-separated (and hence 'braced') code, without it being significantly harder to type the braced version. (After the length of time I've been coding in C and using braces, I'd have to think hard to remember to use the comma notation.)
回答4:
I consider it very good style, but I'm sure others will disagree.
One particular variant use of the comma operator is within the parts of a for statement, as in:
for (i=0, j=1; i<j; i++, j++) { ... }
回答5:
The comma form is more useful for when you cannot use braces:
#define MY_ASSERT(expr) ((expr) || (debugbreak(), 0))
Here debugbreak() returns void, but we still wish to have 0 as an rvalue.
回答6:
The more a code reader has to look / check the language core details, the less that code is readable. In this case there are two distinct instructions, so the braces usage is, in my opinion, obvious.
What about
a = b, c;
or
a = b, c ? d, e : f, g;
Code readers (most) not used to that syntax, may want to check the , precedence to ensure of which value will be assigned.
We expect someone reading a source code to focus on the code logic, not its syntax.
回答7:
I have never used the comma syntax. But this is because I didn't know it existed, to be honest.
If I knew about it, then I would have happily used it in place of annoying braces for a mere two or three statements.
So in my opinion, use at will! Just so long as you don't make that classical mistake:
if (cond)
doSomething();
doSomethingElse(); // <-- oops, unconditional statement!
来源:https://stackoverflow.com/questions/3848590/using-comma-to-prevent-the-need-for-brace-pair