我刚刚决定学习C.我注意到我可以下载多个编译器。如果我为一个编译器编写C代码,它应该适用于所有编译器,对吗?
答案 0 :(得分:6)
简答:是的
答案很长:
是的,但仅限于(但不限于):
在我想到它们时,我会在列表中添加更多内容。
答案 1 :(得分:2)
在C标准中,定义了两种类型的'compiler-dependent'问题:
实现定义的行为:行为可能因编译器而异,但编译器必须提供某种一致的行为,并且必须记录此行为。
直接来自标准的一个例子:“实现定义行为的一个例子是当有符号整数向右移位时高阶位的传播。”换句话说, -1>>的结果1 可能因编译器而异,但编译器必须保持一致。
您还需要注意违规行为。标准通常指定诸如“[main]应定义为返回类型int [...]”(§5.1.2.2.1/ 1)之类的内容。这相当于“如果使用除int之外的返回类型声明main,则程序的行为是未定义的。” (见§4.2,标准明确赞同此解释)
请注意,某些实现定义的行为有限制 - 例如,sizeof(int)的值是实现定义的,但是您知道 sizeof(int)> = sizeof(short)&& sizeof(int)< = sizeof(long) - 所以只要有任何实现定义的行为并不意味着你不能说出程序的作用。