改变目标C标准有什么效果吗?
我对使用C11编译器编译有效C99代码的效果感兴趣。有实际的区别吗 举个例子,你能改变吗改变目标C标准有什么效果吗?,c,gcc,standards,C,Gcc,Standards,我对使用C11编译器编译有效C99代码的效果感兴趣。有实际的区别吗 举个例子,你能改变吗 gcc -c -pedantic -std=c99 source.c 到 如果source.c是有效的C99,你能实现任何目标吗?这会引入回归,还是免费提供优化 我对gcc特别感兴趣,不过最欢迎回答其他编译器的问题 我使用了作为快速检查,以查看C99和C11之间的差异 我注意到,gets在C11中被删除,所以这是一种可能的回归。我能看到的另一个问题是,如果代码执行类似于版本检测的操作,而这不是未来的证明
gcc -c -pedantic -std=c99 source.c
到
如果source.c
是有效的C99,你能实现任何目标吗?这会引入回归,还是免费提供优化
我对gcc特别感兴趣,不过最欢迎回答其他编译器的问题
我使用了作为快速检查,以查看C99和C11之间的差异
我注意到,
gets
在C11中被删除,所以这是一种可能的回归。我能看到的另一个问题是,如果代码执行类似于版本检测的操作,而这不是未来的证明,比如。\if uu STDC\u version\uuu==199901L
对于维护C标准的委员会来说,向后兼容性被认为是非常重要的
您可以预期,当使用新标准的设置编译时,根据上述标准编写的严格一致的程序将以相同的方式运行,除非
- 程序使用已删除的功能(
)从C99移动到C11时获取
- 该程序使用的功能是可选的,而不是由编译器提供的(例如复杂类型或VLA)
- 与您自己的标题同名的新标准标题
- 在新标准中使用的保留标识符使用不正确。特别是以下划线和大写字母开头的标识符
gets()
并不意味着不允许支持它,只是没有必要。它只是不再需要了。同时支持C9x和C11的编译器可能不会将其从库中踢出。@glglgl我工作时没有gcc,所以我无法尝试,但我认为gcc一直警告使用get
。我认为,如果通过实验实现的@bubble编程没有提供可靠的答案,特别是当关注的是标准行为时,特别是当关注的是标准行为时,这一切都是关于实现独立性的,那么-pedantic errors
实际上可能会出错。
gcc -c -pedantic -std=c11 source.c