V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mocodo
V2EX  ›  C

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

  •  
  •   mocodo · 2015-04-06 15:12:59 +08:00 · 4510 次点击
    这是一个创建于 3518 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样:
    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 {

    }
    Humorce
        32
    Humorce  
       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   ·   实用小工具   ·   3447 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:31 · PVG 18:31 · LAX 02:31 · JFK 05:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.