我通常在C89中编写C代码,现在C99的一些功能(如intxx_t
或__VA_ARGS__
或者snprintf
)非常有用,甚至可能至关重要.
在我从C89到C99的更多要求之前,我想知道哪些C99功能得到了广泛支持,哪些功能得不到广泛支持甚至被认为是有害的.
我知道我们可以检查我们的目标编译器支持,但这会缩小我们的支持范围,因为这是开源软件,我更希望得到更广泛的支持.
例如,我们使用Solaris(suncc)编译器和gcc,但可能还有其他编译器,我们可以移动,而我们可以保持兼容性很少的努力.
例如,我从未在Windows上工作,也不了解Windows编译器,但保持Windows兼容性会很好.
goto
仍然被认为是有害的.
不知怎的,我已经收集了四张选票.我提出了上面的陈述来增加轻松性,对它背后的概念只有30%认真.
我期望下来的选票来自那些不了解编程语言历史的年轻人.并不是每一个 goto
是邪恶的,但是,相对于100%纯正的意大利面条的代码,我在(百万FORTRAN 66线) -它是合理的和富有成效的更换尽可能多的合作goto
与结构化报表(报表for
,while
,do .. while
,switch
)成为可能.但有时候,goto
当它避免复杂性时,它就好了,例如额外的标志变量可以打破多个嵌套循环.
好吧,无论您使用哪种桌面操作系统,gcc基本上都是gcc.
Visual C++主要是一个C++编译器,并不像C99规范那么关注.stdint.h确实声明了你最喜欢的intxx_t宏.__VA_ARGS__
是可用的._Bool,_Complex和_Pragma未在Microsoft Visual C++编译器上实现.我很确定%printal/scanf中的字段尚未实现,但VC2010可能会处理它们.snprintf存在,但具有前导下划线和稍微不同的语义.
简短回答:"更容易"的C99功能是在不改变编译器语法或重新配置标准库的情况下实现,VC++更有可能支持它.如果C99和C++之间存在冲突,那么期望C++获胜.