Mandatory use of braces

前端 未结 21 2324
旧时难觅i
旧时难觅i 2021-02-12 23:26

As part of a code standards document I wrote awhile back, I enforce \"you must always use braces for loops and/or conditional code blocks, even (especially) if they\'re only one

21条回答
  •  孤街浪徒
    2021-02-13 00:08

    I see this rule as overkill. Draconian standards don't make good programmers, they just decrease the odds that a slob is going to make a mess.

    The examples you give are valid, but they have better solutions than forcing braces:

    When you don't brace a single-line, and then someone comments it out, you're in trouble.

    Two practices solve this better, pick one:

    1) Comment out the if, while, etc. before the one-liner with the one-liner. I.e. treat

    if(foo)
        bar();
    

    like any other multi-line statement (e.g. an assignment with multiple lines, or a multiple-line function call):

    //if(foo)
    //    bar();
    

    2) Prefix the // with a ;:

    if(foo)
    ;//    bar();
    

    If you don't brace a single-line, and the indentation doesn't display the same on someone else's machine... you're in trouble.

    No, you're not; the code works the same but it's harder to read. Fix your indentation. Pick tabs or spaces and stick with them. Do not mix tabs and spaces for indentation. Many text editors will automatically fix this for you.

    Write some Python code. That will fix at least some bad indentation habits.

    Also, structures like } else { look like a nethack version of a TIE fighter to me.

    are there good reasons why this would be a mistaken or otherwise unreasonable standard? There's been some discussion on it, but no one can offer me a better counterargument than "it feels ugly".

    Redundant braces (and parentheses) are visual clutter. Visual clutter makes code harder to read. The harder code is to read, the easier it is to hide bugs.

    int x = 0;
    while(x < 10);
    {
        printf("Count: %d\n", ++x);
    }
    

    Forcing braces doesn't help find the bug in the above code.

    P.S. I'm a subscriber to the "every rule should say why" school, or as the Dalai Lama put it, "Know the rules so that you may properly break them."

提交回复
热议问题