C/C++猿们,你们的花括号{}都习惯怎么写? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mocodo
V2EX    C

C/C++猿们,你们的花括号{}都习惯怎么写?

  •  
  •   mocodo 2015-04-06 15:12:59 +08:00 5060 次点击
    这是一个创建于 3851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样:
    if
    {
    }
    else
    {
    }
    还是这样:
    if {
    }
    else {
    }
    呢?

    我觉得后一种写法不对称,看着很别扭,可很多代码都这样写。。。
    91 条回复    2015-04-08 22:28:40 +08:00
    zyue
        1
    zyue  
       2015-04-06 15:18:57 +08:00
    我是前一种 写java代码也是这样
    skydiver
        2
    skydiver  
       2015-04-06 15:20:35 +08:00   3
    都不对,应该是这样
    if {
    } else {
    }
    endrollex
        3
    endrollex  
       2015-04-06 15:22:54 +08:00
    后一种可以节约一行,喜欢紧凑,如果空出来太多觉得不舒服
    liuhaotian
        4
    liuhaotian  
       2015-04-06 15:24:48 +08:00
    for ($i=1;$i<5;$i++) {
    if () {
    } else {
    }
    }
    vopfly
        5
    vopfly  
       2015-04-06 15:27:51 +08:00   1
    class A
    {
    A()
    {
    if (true) {

    } else {

    }
    }
    }

    个人习惯:class, struct, function 另起一行,其他不
    vopfly
        6
    vopfly  
       2015-04-06 15:28:27 +08:00
    空格被狗吃了
    nicai000
        7
    nicai000  
       2015-04-06 15:31:44 +08:00
    这个有规矩的好吧!

    可以嵌套的写在行尾, 不可以嵌套的另起一行. K&R, 内核, 甚至包括K的Go语言全是遵循这个原则的.
    YouXia
        8
    YouXia  
       2015-04-06 15:37:57 +08:00
    以前第一种,后来我们组要求第二种,就慢慢适应第二种了。并且学了Go语言,所以,第二种就适应了。
    MrGba2z
        9
    MrGba2z  
       2015-04-06 15:53:05 +08:00 via iPhone
    以前是第一种 后来学校里全是第二种就改成第二种了。。
    sudoz
        10
    sudoz  
       2015-04-06 16:06:11 +08:00
    Class的{另起一行;
    function的{ 空一格不换行
    zcbenz
        11
    zcbenz  
       2015-04-06 16:12:12 +08:00   1
    Google C++ Style Guide
    https://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Conditionals

    风格什么样其实无所谓,统一就好。
    mnsw
        12
    mnsw  
       2015-04-06 16:22:20 +08:00
    以前是
    ```
    if
    {
    }
    else
    {
    }
    ```
    后来是
    ```
    if {
    } else {
    }
    ```
    bugeye
        13
    bugeye  
       2015-04-06 16:26:04 +08:00
    不写花括号,语号用逗号分隔,这样就没烦恼了吧。
    jiezhi
        14
    jiezhi  
       2015-04-06 16:27:48 +08:00
    我写Java是:
    if {
    } else {
    }

    写C/C++是:
    if
    {
    }
    else
    {
    }

    写python时:
    。。。
    咦花括号呢?

    不过在公司项目里,还得跟着前人走。
    jasontse
        15
    jasontse  
       2015-04-06 16:30:36 +08:00 via iPad
    此帖还可以衍生出你们的括号前后带不带空格呢
    FOO( A, B )
    还是
    FOO(A, B)
    Jaylee
        16
    Jaylee  
       2015-04-06 16:39:15 +08:00
    @jasontse 带空格也不是这样带啊。。。

    Foo(A, B, C)
    lifanxi
        17
    lifanxi  
       2015-04-06 18:09:26 +08:00
    我写C++用stroustrup风格,花括号永远独占一行。
    rentaro
        18
    rentaro  
       2015-04-06 18:14:05 +08:00
    C 是第一种, Java 是第二种。参考 Linux 内核文档有完整的代码规范
    leavic
        19
    leavic  
       2015-04-06 18:15:40 +08:00
    第一种,强迫症肯定都这样。
    GeekCat
        20
    GeekCat  
       2015-04-06 18:18:32 +08:00
    class{
    function{
    for{
    if{
    ....
    换行的大括号不舒服!大括号换行会死星人!
    GeekCat
        21
    GeekCat  
       2015-04-06 18:19:37 +08:00
    当然我得承认这是从某些“宇宙级语言”带过来的习惯。。。。
    chiu
        22
    chiu  
       2015-04-06 18:20:14 +08:00
    XadillaX
        23
    XadillaX  
       2015-04-06 18:21:50 +08:00
    我写 C 系是

    if
    {
    }
    else
    {
    }

    如果是 js 系的话

    if {
    } else {
    }
    ncisoft
        24
    ncisoft  
       2015-04-06 18:22:38 +08:00 via Android
    独爱GNU coding standard
    if (...)
    {
    // code here
    }
    FastMem
        25
    FastMem  
       2015-04-06 18:22:42 +08:00
    Java\php的时候
    if () {
    //DO
    } else {
    }

    单行语句省略花括号、

    直接 if () xxxxx
    //do
    ncisoft
        26
    ncisoft  
       2015-04-06 18:23:55 +08:00 via Android
    花括号前面两个空格
    inevermore
        27
    inevermore  
       2015-04-06 18:44:57 +08:00
    前者 看着整齐
    dreamtrail
        28
    dreamtrail  
       2015-04-06 18:51:13 +08:00
    if () {
    } else {
    }
    我不能接受别的形势的代码风格,读代码前一定要重排成这种的风格。
    Majirefy
        29
    Majirefy  
       2015-04-06 18:58:05 +08:00
    少年又挑起来宗教战争……
    zhchbin
        30
    zhchbin  
       2015-04-06 18:58:30 +08:00
    if () {
    } else {
    }

    但更多时候,如果能写成下面这种形式,就不会出现else了。

    if () {
    ...
    return;
    }

    ...
    kn007
        31
    kn007  
       2015-04-06 19:02:22 +08:00
    我是2楼这种。。。

    if {

    } else {

    }
    rzti483NAJ66l669
        32
    rzti483NAJ66l669  
       2015-04-06 19:06:10 +08:00
    if[tab]([space][space])
    [tab]{
    [tab]#code#
    [tab]}

    JAVA
    Rob
        33
    Rob  
       2015-04-06 19:13:29 +08:00
    第一种,看着舒服
    lincanbin
        34
    lincanbin  
       2015-04-06 19:15:34 +08:00
    typcn
        35
    typcn  
       2015-04-06 19:16:38 +08:00
    JS 类的
    if ( content ){

    } else {

    }

    C 类的
    if(content){

    }else{

    }

    IDE 强制纠正的除外
    ryd994
        36
    ryd994  
       2015-04-06 19:18:35 +08:00 via Android
    又是圣战贴
    hit9
        37
    hit9  
       2015-04-06 19:20:08 +08:00
    if (balabala) {
    } else if (balabala) {
    } else {
    }
    fetich
        38
    fetich  
       2015-04-06 19:21:02 +08:00
    都了,是第一。
    patrickstar
        39
    patrickstar  
       2015-04-06 19:49:48 +08:00
    我一般用第一种,主要是看习惯了,括号配对的时候看起来都列对齐的
    heliar
        40
    heliar  
       2015-04-06 19:53:27 +08:00
    不缩进不舒服的飘过。。。
    Monad
        41
    Monad  
       2015-04-06 20:50:01 +08:00

    必须是这样的
    F32
        42
    F32  
       2015-04-06 20:53:23 +08:00 via Android
    @vopfly 发空格要用 nbsp; 哦
    nicktogo
        43
    nicktogo  
       2015-04-06 22:10:17 +08:00 via Android
    @fetich 正解。。。刚入门就是第一种,后来学java改成第二种了
    xxzs
        44
    xxzs  
       2015-04-06 23:06:09 +08:00 via Android
    Linux kernel要求一行能写完的不加花括号
    clanned
        46
    clanned  
       2015-04-06 23:18:43 +08:00 via Android
    C/C++第一种,Java第二种。
    omi4399
        47
    omi4399  
       2015-04-06 23:34:34 +08:00
    K&R 飘过
    andyhunter
        48
    andyhunter  
       2015-04-06 23:42:53 +08:00
    永远独占一行
    xuwenmang
        49
    xuwenmang  
       2015-04-06 23:48:58 +08:00
    if {
    } else {
    }

    优点1、在越来越宽的屏幕上能看到更多的代码;
    优点2、{ 起到承上启下的作用;
    styletjy
        50
    styletjy  
       2015-04-06 23:58:09 +08:00
    来找事儿的。。
    br00k
        51
    br00k  
       2015-04-07 01:33:14 +08:00
    格式化。。。
    book1925
        52
    book1925  
       2015-04-07 02:03:35 +08:00 via Android
    喜欢第一种,第二种偶尔会眼瞎搞错。。
    linux40
        53
    linux40  
       2015-04-07 07:00:56 +08:00 via Android
    ansc风格
    eqing
        54
    eqing  
       2015-04-07 08:20:13 +08:00
    if (x) {
    xxx
    } else {
    xxx
    }

    的路过
    anguslg
        55
    anguslg  
       2015-04-07 09:32:18 +08:00
    好像是在问php是不是最好的语言一样
    revlis7
        56
    revlis7  
       2015-04-07 10:14:57 +08:00
    记得以前看ThinkInC里面提到的是用花括号与函数名同行的写法,这样可以明显区分是Declaration还是Definition
    ehs2013
        57
    ehs2013  
       2015-04-07 10:25:25 +08:00
    fliar
        58
    fliar  
       2015-04-07 10:27:00 +08:00
    是另起一行,上下
    看嵌套不太看走眼
    XDA
        59
    XDA  
       2015-04-07 10:29:10 +08:00
    随缘...
    bugeye
        60
    bugeye  
       2015-04-07 10:29:57 +08:00
    @ehs2013 你这种单行的真心没必要加任何括号。
    ehs2013
        61
    ehs2013  
       2015-04-07 10:32:48 +08:00
    @bugeye 你不知道什么时候,就要再在流程中添加一个语句。这样写的话无论何时都没有问题。
    同理,在 C++ 中,我也会为每一个类写空析构函数。
    canautumn
        62
    canautumn  
       2015-04-07 10:35:24 +08:00   1
    @revlis7 看到你这个,想起来一个刚好相反的案例,刚在objc.io上看到omnigroup的惯例是(objective-c)不论definition还是declaration,函数名结尾都加分号;(一般definition是不加分号,直接写花括号。他们不仅是花括号另起一行,而且函数定义后边也加上分号)。理由和你说的刚好相反:方便将整行从declaration拷贝到definition,或者反过来。
    canautumn
        63
    canautumn  
       2015-04-07 10:38:54 +08:00   1
    @bugeye 前一段出了heartbleed漏洞后,有一种意见是即使花括号里是单行,也应该加花括号,理由是有可能在以后的维护中需要在花括号里加一行,甚至加一个调试输出,都要再麻烦加上花括号。就这样加/去花括号的一来一回中,一不小心就有可能忘记。再加上缩进,很有可能看错,就导致了heartbleed这类漏洞。

    当然仅仅是一种意见而已。
    Halry
        64
    Halry  
       2015-04-07 10:43:08 +08:00 via Android
    第一种,好看一点,
    revlis7
        65
    revlis7  
       2015-04-07 10:46:22 +08:00
    @canautumn 其实我也怀疑书里的说法,因为Declaration都是有分号的,倒觉得你说的更有实际价值。
    jun4rui
        66
    jun4rui  
       2015-04-07 11:41:00 +08:00
    这不是可以和VIM、Emacs相提并论的程序员顶级圣战之一吗?
    Amankwah
        67
    Amankwah  
       2015-04-07 11:46:23 +08:00
    @skydiver 好吧,我也是这样写的……
    seki
        68
    seki  
       2015-04-07 11:51:34 +08:00
    这个不是公司统一代码风格的事情么,个人鼓捣的话可以参照某些公司的规则
    csslayer
        69
    csslayer  
       2015-04-07 12:10:36 +08:00
    qaulau
        70
    qaulau  
       2015-04-07 13:30:08 +08:00
    个人喜好这样,顶格写,看起来紧凑
    if {

    } else {

    }
    lintmx
        71
    lintmx  
       2015-04-07 13:35:56 +08:00
    @skydiver 我也是这种。
    hippoboy
        72
    hippoboy  
       2015-04-07 13:48:25 +08:00
    if {
    } else {
    }
    fashioncj
        73
    fashioncj  
       2015-04-07 13:55:29 +08:00
    两种对折叠都没有影响-。- 主要是自动格式化的语法问题。
    evlos
        74
    evlos  
       2015-04-07 14:23:41 +08:00 via iPhone
    本来我是第二种写法,给你们一讲我也想改成这样了XD
    if {
    } else {
    }
    zwzmzd
        75
    zwzmzd  
       2015-04-07 14:45:33 +08:00 via iPad
    Citrus
        76
    Citrus  
       2015-04-07 14:48:00 +08:00 via iPhone
    @canautumn 非常同意,所以我的代码里不存在单行,所有的都写成代码块,调试的时候随手加减一行很方便,如果这个条件暂时不要了直接删掉都没问题。
    raincious
        77
    raincious  
       2015-04-07 14:54:56 +08:00
    微软表示要逼屎你们这些不另起一行写 { 的异类



    (我已经老实了)
    (这就是为啥有的时候PHP写着写着:咦?怎么PSR2过不了了)
    perseawe
        78
    perseawe  
       2015-04-07 15:10:56 +08:00
    只要符合某种规范都可以,到时候其他人看的时候用IDE AutoStyle一下就好了。

    一会缩进一会不缩进的直接打死,两元运算符两边不加空格的打死。
    pinepara
        79
    pinepara  
       2015-04-07 15:12:12 +08:00
    风格不重要,风格统一才重要。
    http://clang.llvm.org/docs/ClangFormatStyleOptions.html
    niconiconi
        80
    niconiconi  
       2015-04-07 16:06:08 +08:00
    坚决选择第一种。方便看
    Heng
        81
    Heng  
       2015-04-07 16:33:33 +08:00
    lzgouo
        82
    lzgouo  
       2015-04-07 19:44:21 +08:00
    像2楼那种写法
    fulvaz
        83
    fulvaz  
       2015-04-07 20:39:26 +08:00
    讨论这个没有任何意义

    花括号之后为了让你的代码分出块,更加易读,现在越来越多人发现,假如取消括号只使用缩进也能达到一样的视觉效果,还避免了后一个括号
    }
    }
    }
    }
    }
    }

    像这样的灾难


    那你硬是要分出个高低的话
    main(...) {
    }
    更好
    首先节省一行,让你的代码视野更广,能看到更多代码

    其次,是行气,因为代码的内容应该是函数名称的承接,函数名应该接着代码,不能让思维被括号打断,所以{应该放到函数名称后面,而不是空一行

    要战我把我老板叫上来,和你们辩到明年都行
    fulvaz
        84
    fulvaz  
       2015-04-07 20:40:55 +08:00
    @fulvaz
    ...我了个去,我的缩进被狗吃了?
    fatestigma
        85
    fatestigma  
       2015-04-07 22:51:06 +08:00
    我个人喜欢第二种。但是我们学校很多书上采用第三种。。
    if ()
    { [code at here]
    }
    else
    { [code at here]
    }
    yech1990
        86
    yech1990  
       2015-04-08 01:35:44 +08:00 via Android
    The pythonic way

    if ( ) {
    [code...] }
    else {
    [code..] }
    yech1990
        87
    yech1990  
       2015-04-08 01:53:02 +08:00 via Android
    居然吃掉我的缩进

    >> if (a) {
    >> XXX }
    >> else {
    >> XXX }
    ThomasZ
        88
    ThomasZ  
       2015-04-08 17:39:08 +08:00
    以前是第一种, 现在改成第二种了, 一个括号占一行太浪费了, 而且代码折叠以后第二种看着会好一点(vim自带的缩进折叠)
    mozartgho
        89
    mozartgho  
       2015-04-08 18:17:39 +08:00
    @vopfly 这是K&R写法,我也习惯这样
    icylord
        90
    icylord  
       2015-04-08 20:38:30 +08:00
    第一种。
    hector
        91
    hector  
       2015-04-08 22:28:40 +08:00
    ```
    #define begin {
    #define end }

    void hello()
    begin
    std::cout<<"hello world"<<std::endl;
    end
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3627 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 04:20 PVG 12:20 LAX 21:20 JFK 00:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86