使用多个编译器编译C代码

时间:2014-09-29 03:46:51

标签: c windows compilation

我刚刚决定学习C.我注意到我可以下载多个编译器。如果我为一个编译器编写C代码,它应该适用于所有编译器,对吗?

2 个答案:

答案 0 :(得分:6)

简答:是的

答案很长:

是的,但仅限于(但不限于):

  • 您的代码没有使用其他编译器上没有的编译器特定内容
  • 您的代码所依赖的库可用并在其他编译器上正确设置
  • 您的代码未调用/依赖未定义或实现定义的行为
  • 另一个编译器大致使用与当前编译器相同的C标准编译。

在我想到它们时,我会在列表中添加更多内容。

答案 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) - 所以只要有任何实现定义的行为并不意味着你不能说出程序的作用。