English 中文(简体)
C99 公开来源项目的混合宣言和守则?
原标题:C99 mixed declarations and code in open source projects?
最佳回答

这是一个老的问题,但我会说,惯性是大多数这些项目仍然使用《欧洲倡议》声明规则的原因。

然而,还有其他一些可能性,从有效到rid:

  • 便携式。 许多开放源项目基于以下假设开展工作: pe铁ANSI C是软件最便携的方式。

  • 年龄。 其中许多项目预示着C99的幽灵,作者可能更喜欢一种连贯的编码风格。

  • 忽视。 提交C99号文件的节目者不知道混合宣言和守则的好处。 (替代解释:开发商充分了解潜在的权衡,并决定混合声明和声明不值得努力。) 我非常不同意,但很少两名方案者会同意任何内容。

  • FUD. 方案者将混合宣言和守则视为“C++ism”,并出于这一原因不喜欢。

问题回答

don t需要混合宣言和守则,以限制范围。 你可以做到:

{
  int c;
  c = 1;
  {
    int d = c + 1;
  }
}

C89。 至于这些项目为何使用混合声明(假设情况确实如此),最有可能出现“如果它不打碎,就没有固定。

几乎没有理由改写Linot kernel,以便进行不会带来业绩收益的宇宙变革。

如果守则基础正在发挥作用,那么为什么出于共鸣的理由而加以改变?

没有福利。 在职能开始时(如帕斯卡尔)申报所有变量更为明确,在C89中,你也可以宣布每个范围(如坡道)开始时的变量,这些变量既实用又简明。

我不记得在《油轮法》的风格指南中任何针对这一点的阻截。 然而,它确实说,职能应当尽可能小,只做一件事。 这将解释为什么少有混合的宣言和法典。

在一个小的职能中,在范围开始时宣布变数为Intro,向您讲述了不久之后出现的情况。 在此情况下,变式声明的移动非常有限,因此可能不会产生任何效果,或者通过将易酒者推入人群来掩盖有关功能的某些信息,这样说。 有理由宣布国王的到来之前。 他进入了一个房间。

OTOH这一功能必须混合变数和编码才能阅读,可能太大。 这是一些迹象(除了带过于宽的区块、线性评论和其他东西)之一,即某一职能的某些部分需要从单独的职能(并宣布<代码>static,以便优化者能够将其排列)。

在职能开始时保留声明的另一个原因是:如果你需要重新确定执行守则中声明的顺序,那么你可以在不实现声明的情况下摆脱其范围的变化,因为刑法中宣布的变量的范围在登革站中并不明显(除非你利用一个集团来显示其范围)。 这很容易固定下来,因此它只是空洞,但新法典经常经历这种转变,而诺言可能是累积的。

还有一个原因:你可能会试图宣布一个变数,以便从一项职能中采用错误的回归代码,例如:

void_func();
int ret = func_may_fail();
if (ret) { handle_fail(ret) }

这样做完全合理。 但:

void_func();
int ret = func_may_fail();
if (ret) { handle_fail(ret) }
....
int ret = another_func_may_fail();
if (ret) { handle_other_fail(ret); }

Ooops!ret两次界定。 “So” 删除你说的第二项声明。 但是,这使得代码不对称化,而归根结底,你的局限性更重。

当然,我把宣言和守则混为一谈;没有理由对此表示怀疑(或者说,你的卡马可以接手你的话:-)。 但是,你们应当知道随之而来的问题是什么。

难道这不需要吗? 分离是否好? 我在C++中这样做,C++也有这一特点。

没有理由改变这种守则,而C99仍然没有得到汇编者的广泛支持。 主要是关于便携式。





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签