- 论坛徽章:
- 2
|
回复 3675# pmerofc
ISO C对include的规定就是将文件内容就地展开。而文件的后缀,除了那些standard header是已经用了.h之外,没有规定应该/必须用什么。
而ISO C又规定了什么?规定了什么叫定义与声明,规定了linkage,规定了one definition rules。
相比.h/.c或者.xxoo,这些才是更重要的。后者才是C语言本身、前者只是在后者基础上产生的另一个通俗的约定而已。
只要理由足够充分,又满足了C语言的定义 —— 我相信村夫不会是连multiple definition都解决不了的水平,或者说他都敢再三提inlcude .c,应该连这种错误都不会犯。
那么打破个人为约定又有什么值得大惊小怪的?
就像"禁用goto"、"switch须接break,哪怕是最后一个标号,否则一定要跟一条注释"、"不要用if (p),if (p!=0),if (p!=NULL), if (0!=p)而要用。。。"
就这么见不得其他人打破自己坚持的那点教条? 就不能多包容一点? 争论的都是些什么鸡毛蒜皮的事啊?
他人在他的情形、价值观下写了点与你们价值观不同的代码,又关你们什么事啊?
最好与最正确的教条或最佳实现是: use your brain, always。
前面说打破.h/.c有个前提一直没说,就是有充分的理由。
static是ISO C提供的标准的控制访问性的方式。inlcude也是ISO C提供的将其他文件内容插入到当前位置的标准机制。 —— 每个编译器都会提供。
既然它们能解决问题,为什么必须要去用编译器提供的扩展? 而且这些扩展的控制能力还不如static(linking target之间与translation unit之间)。
@蔡万钊不能理解这样的价值观(村夫所说的代价)我不奇怪。我奇怪的是为什么你也不能理解?
在其他各种问题上,你几乎都是坚守ISO C(这不用我举例了吧?),为什么只在这个问题上宁可用编译器扩展?
于是我就不明白了,你意图宣扬的到底是ISO C?还是你所理解的C?只是恰好大部分情况下两者相同,所以ISO C被当枪使了?
>> 这个话题不断有新观点出现,我觉得是好事。争论是好事
我倒是觉得这事坏得不能再坏了。
是否不能inlcude .c,与是否不能goto,是否不能省略break、省略if里的!=0、省略{}等等都是一类问题 —— 闲得蛋疼。
你有你的风格、他有他的习惯,各种情形状况不同,为什么非得认为自己对这种无关正确性的选择是所有人都必须遵守的?
我倒是希望能不要出现这种无关痛痒的讨论,但我希望没用,肯定会层出不穷的。
>> sw后来做了一个较为全面地总结
inlcude .cpp大概08年时用过,goto肯定从08年之前开始就没用过了。
而我几小时之前还在看这货的代码,include .c与goto都有,你问他,我对此开腔了么?
|
|