打印

【求助】公司统一规定"{"必须放在行末,这很不习惯,我该怎么

[复制链接]
楼主: 肚里有史
手机看帖
扫描二维码
随时随地手机跟帖
41
shkliu| | 2007-9-18 08:48 | 只看该作者 回帖奖励 |倒序浏览

推荐一个软件 Artistic Style 1.21。

网上可以找到源代码,然后编译成一个exe文件。我放到source insight里面。 运行一次包你满意。
参数说明。


    --style=ansi
    ANSI style formatting/indenting. Brackets are broken, indentation is 4 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace
        {
        int Foo()
        {
            if (isBar)
            {
                bar();
                return 1;
            }
            else
                return 0;
        }
        }


    --style=gnu
    GNU style formatting/indenting.  Brackets are broken, blocks are indented, indentation is 2 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace
          {
            int Foo()
              {
                if (isBar)
                  {
                    bar();
                    return 1;
                  }
                else
                  return 0;
              }
          }


    --style=kr
    Kernighan&Ritchie style formatting/indenting. Brackets are attached, indentation is 4 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace {
        int Foo() {
            if (isBar) {
                bar();
                return 1;
            } else
                return 0;
        }
        }


    --style=linux
    Linux style formatting/indenting. All brackets are linux style, indentation is 8 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace
        {
        int Foo()
        {
                if (isBar) {
                        bar();
                        return 1;
                } else
                        return 0;
        }
        }


    --style=java
    Java style formatting/indenting. Brackets are attached, indentation is 4 spaces. Switches are NOT indented.

        class foospace {
            int Foo() {
                if (isBar) {
                    bar();
                    return 1;
                } else
                    return 0;
            }
        }

使用特权

评论回复
42
HWM| | 2007-9-18 08:56 | 只看该作者

看样子以后编译系统还要能产生一个源程序的标准格式输出

使用特权

评论回复
43
john_light| | 2007-9-18 08:59 | 只看该作者

赞tandake一个

用那么多字提出了很中肯的意见,还有灵活的vim使用技巧。

我也赞成ayb_ice的“没有任何一种规范能适应所有情况”说法。

公司统一编码风格往往是为了照顾大家的阅读习惯,很难想象在一个项目中,源代码里有四五种编码风格,而且交错分布其中的情况。

楼主提到的两种风格我都用过,在我看来差别不大。

使用特权

评论回复
44
粉丝| | 2007-9-18 09:20 | 只看该作者

大牛一大帮,22楼,41楼何方神圣?竟不食人间烟火!拍个合

牛啊,向您老哥俩学习!谢谢!
顺便留个记号!以便日后查找!

拍个写真照:
tandake 发表于 2007-9-17 15:30 ARM 论坛 ←返回版面    
22楼: 楼主,给你个方法自动转风格吧! 
用不用vim?
按你自己的风格编好代码以后,
运行下面这行命令,就可以转成你们公司要求的风格啦!
:g/^s*{/-1j
试试看,有问题找我啊!呵呵:)
tandake 发表于 2007-9-17 22:00 ARM 论坛 ←返回版面    

肚里有史 发表于 2007-9-17 20:13 ARM 论坛 ←返回版面    
28楼: 22楼tandake的方法还真不错,不过还是差一点点 
vim/gvim从来没用过,刚才下载了一个。按照22楼tandake的方法,试了一下,还真不错,结果如下:

int Max(int iX, int iY) {
    if ( iX >= iY ) {
        return iX;
    }
    else {
        return iY;
    }
}

只是else还有些问题,按公司《规范》的要求应该是:
 
tandake 发表于 2007-9-17 22:00 ARM 论坛 ←返回版面    
30楼: 更正针对else的错误 
在vim中运行命令
:g/^s*[{(else)]/-1j
就可以把第一种风格变成第二种风格了
如果这个还有问题,我会继续负责的:P

shkliu 发表于 2007-9-18 08:48 ARM 论坛 ←返回版面    
41楼: 推荐一个软件 Artistic Style 1.21。 

网上可以找到源代码,然后编译成一个exe文件。我放到source insight里面。 运行一次包你满意。
参数说明。


    --style=ansi
    ANSI style formatting/indenting. Brackets are broken, indentation is 4 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace
        {
        int Foo()
        {
            if (isBar)
            {
                bar();
                return 1;
            }
            else
                return 0;
        }
        }


    --style=gnu
    GNU style formatting/indenting.  Brackets are broken, blocks are indented, indentation is 2 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace
          {
            int Foo()
              {
                if (isBar)
                  {
                    bar();
                    return 1;
                  }
                else
                  return 0;
              }
          }


    --style=kr
    Kernighan&Ritchie style formatting/indenting. Brackets are attached, indentation is 4 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace {
        int Foo() {
            if (isBar) {
                bar();
                return 1;
            } else
                return 0;
        }
        }


    --style=linux
    Linux style formatting/indenting. All brackets are linux style, indentation is 8 spaces. Namespaces, classes, and switches are NOT indented.

        namespace foospace
        {
        int Foo()
        {
                if (isBar) {
                        bar();
                        return 1;
                } else
                        return 0;
        }
        }


    --style=java
    Java style formatting/indenting. Brackets are attached, indentation is 4 spaces. Switches are NOT indented.

        class foospace {
            int Foo() {
                if (isBar) {
                    bar();
                    return 1;
                } else
                    return 0;
            }
        }

使用特权

评论回复
45
shkliu| | 2007-9-18 10:55 | 只看该作者

emacs好像也可以。

哈哈,我是菜鸟来着。

设置好一种(c-set-style)选择你需要。然后全选,使用ctrl+alt+  组合健可以重新排版。
自从用了Artistic Style我就不怎么用emacs,主要是不怎么习惯。vim还比较习惯了。但是也很少用。现在还用的source insight,足可以证明自己是个菜鸟了:)

使用特权

评论回复
46
宇宙飞船| | 2007-9-18 11:10 | 只看该作者

原来是教会中的大牛们,失敬!失敬!俺又大长见识了!

使用特权

评论回复
47
kingkits| | 2007-9-18 11:32 | 只看该作者

我原来公司还规定一个模块不可以超过一屏呢!

要是你到我原来的公司去,你会主动改成那个风格。
给你个建议:自己做一个格式转换的程序吧,想怎么转换都可以我以前也这么做!也不需要很多时间。(别跟我说你不会吧  ^-^)

使用特权

评论回复
48
wangkj| | 2007-9-18 13:36 | 只看该作者

47,48楼说的规定我赞成,但是{}位置,我觉得太过分了。

使用特权

评论回复
49
yqliu29| | 2007-9-18 20:42 | 只看该作者

第一种看起来代码量少些,我喜欢。

使用特权

评论回复
50
肚里有史|  楼主 | 2007-9-18 21:27 | 只看该作者

tandake的方法不错,我又试了一下,效果很好,谢谢!

使用特权

评论回复
51
肚里有史|  楼主 | 2007-9-18 21:28 | 只看该作者

还有一个无法容忍的规定:不许使用“//”注释

  公司《规范》称不许使用双斜杠“//”注释,而必须采用“/*...*/”。理由是某些C编译器可能不支持“//”,代码不便于移植。

  我的观点是,现在几乎所有的C/C++编译器都是两种注释方法都支持。只是在早期,C语法里没有“//”的规定。如果“//”不让用,那么怎么解释C++为何发明“//”呢?

  在函数体的内部,采用“//”是有好处的,类似的情况还有结构、联合等。在调试的时候,如果希望临时隐藏掉某个函数,只需要简单地在函数头和尾分别添加“/*”和“*/”即可,用起来十分方便。如果不让用“//”,就麻烦了,由于“/*...*/”格式不允许嵌套,您就无法简单地把该函数隐藏掉,只能使用“#ifdef...#endif”或者干脆删除该函数,这样不习惯而且不方便呀!

  当然,《规范》里还有其它一些规定不是很习惯,已经明显甚至严重影响到了我的效率。

使用特权

评论回复
52
ayb_ice| | 2007-9-18 21:40 | 只看该作者

建议LZ辞工...

使用特权

评论回复
53
王紫豪| | 2007-9-18 22:08 | 只看该作者

不让//注释? 那你用#define 注释,气死他

使用特权

评论回复
54
djyos| | 2007-9-18 22:54 | 只看该作者

不让用//就有点过分了

    那现在仍然大量存在不支持mmu的cpu,是不是也要禁止启用mmu呢?这样程序可以移植到任何cpu上啊!
    虽然历史有巨大的力量,这个力量常常成为历史前进的阻力,但我们还是不要人为地增大这种阻力。不支持//的编译器几乎绝迹的今天,还是不要做这样的规范为好,因为规范也要尽可能地照顾开发效率,由于/**/不支持嵌套,故//可以大大提高开发效率,应该没有人否定吧。
    LZ要是告诉规范制定者,有些编译器不知道如何处理下列语句:
int *a,b,c;
b = c/*a + (int)"*/";
    那样规范是不是会禁止在源代码中使用注释。

使用特权

评论回复
55
tandake| | 2007-9-18 23:27 | 只看该作者

不让用//确实有点过了

不让用//的理由也有点牵强,因噎废食啊!

不过报怨也解决不了问题,对自己工作状态也有影响。

关于屏蔽函数,就用#if 0 #endif 吧,用这个确实要比用/**/好一些,虽然会费点时间,其实习惯了是一样的,而且编程不像聊天,主要还是动脑子,手底下一般还是有点空的,多敲几下键盘吧。

下面这个vim命令应该可以给//的注释起一个简单的替换,但是如果这个//本身就在/* */里面,那就会出现楼主所说注释嵌套的问题,若楼主需要确认是否替换的话,可以在后面加一个c,表示confirm.

:%s!//+(.*)$!/*1*/!g

这个规范确实有点不大与时俱进了,希望不要影响楼主的工作心情。。。


另外,回楼上各位不吝褒奖的朋友,其实我也是初学者,只是了解vim的一些基本应用,没啥技术含量,看到楼主的问题可以用vim方便地解决,就斗胆献个计。需要向各位好好学习,以后在这里提问,还望各位赐教。

使用特权

评论回复
56
soso| | 2007-9-19 07:12 | 只看该作者

第一个用法,我倒是一直这样写的

   觉得清楚明了。第二个确实过分,大多数时候,我们都是对本行程序注解用//,而换行对接下来的一段程序一行或几行解决的问题或要达到的目标注释就用/* ...*/

使用特权

评论回复
57
sodwell| | 2007-9-19 08:05 | 只看该作者

re

我注释掉一段函数用的 #if 0  #endif  感觉还是很方便啊。不过在句为注释我还是喜欢 用 //

使用特权

评论回复
58
逆水行舟| | 2007-9-19 08:43 | 只看该作者

这是中国大部分公司的定数

公司早期-->规矩很少且宽松-->开发工程师自由,创新效率高
公司壮大-->规矩增多且严格-->开发工程师死板,做事效率低

公司早期-->开发工程师较少-->老板直接控制-->不需要条条框框-->关系和睦
公司壮大-->开发工程师增多-->管理出现失控-->需要规矩来弥补-->关系疏远

使用特权

评论回复
59
cnpollux| | 2007-9-19 08:53 | 只看该作者

很好,很强大

没有什么好与坏,也没有什么对与错,其实纯粹都是心态的问题...

使用特权

评论回复
60
冲浪人| | 2007-9-19 09:34 | 只看该作者

tandake在32楼那些话说得真好

可以看得出的确是经验之谈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则