我没有得到这个C/C++笑话

But*_*cup 34 c c++

在thedailywtf.com上阅读这篇文章之后,我不确定我真的开玩笑了.

它说有些人改变了代码

int function() 
{ 
  int x;
  char data_string[15];
  ...
  x = 2;
  strcpy(data_string,"data data data");
  ...
}
Run Code Online (Sandbox Code Playgroud)

int function() 
{
  int x = 2;
  char data_string[15] = "data data data";
  ...
}
Run Code Online (Sandbox Code Playgroud)

在代码中的任何地方,由于某种原因确实将可执行文件的大小从1张CD扩充到2张(或者它可能没有这样做?).

显然我对C/C++并不熟悉得到这个笑话,但最令人感到奇怪的是,第二个代码清单似乎"更干净" - 至少从我在学校被告知的那个(即初始化变量是一个好事,不是坏事).

Dig*_*oss 31

OIC,这是一个源代码流失问题

乍一看,这两种形式是等价的.第二个确实看起来更好,但他们做同样的事情.

但后来我读了引用的页面.

问题是这个新人搅动了源树,很多.通过一个巨大的源代码树进行巨魔并进行毫无意义的改变是一种糟糕的形式.当然,也许一种风格比另一种风格略胜一筹,但在实践中,在将1000个增量放入源代码控制系统之前,它应该要好得多,因为人们需要通过永恒来证明这一点.

我怀疑这是一个源版本,或者其他一些未提及的复杂性导致编辑许多文件以扩展其分发.对该网站的贡献进行了相当多的编辑,但基本上这个问题在没有具体细节的情况下是可以理解的.

为样式更改编辑zillion文件的问题之一是无意中错误的可能性增加.当初级开发人员这样做时,这个机会大大增加.即使对于有经验的人,也要考虑墨菲定律.如果它在发布之前发生,那真的是一种悬而未决的冒犯.


laa*_*lto 24

根据编译器和编译器选项,这样初始化

char data_string[15] = "data data data";
Run Code Online (Sandbox Code Playgroud)

导致大量移动指令将文字数据复制到堆栈.

呼叫strcpy需要较少的指令.

在大型代码库中执行此类操作可以显着增加二进制文件大小.

当然,他没有把时间花在增加任何价值上.

  • @reptrich:这是一种可能性,但要么可以做到.例如,一个常见的MSVC++优化取代了对某些库函数的调用,如`strcpy()`和`memcpy()`with inlined"intrinsics"; 并且编译器可以自由调用内部库函数来执行就地数组初始化. (4认同)

Cle*_*man 7

第二个代码确实"更干净",但是如果项目的大小与文章相关,那么认为像这样的重构最多是无用的,最糟糕的是容易出错,这是荒谬的.

然而,这种重构不会使.Exe大小形成1到2个cds