编译程序中的C++扩充功能可以用在C语言程序中吗?
不可以,它们只能用在真正的C++程序中。
C++中的一些突出性能已被ANSI/ISO C标准委员会所接受,它们不再是“C++扩充功能”,而已经成为C的一部分。例如,函数原型和const关键字就被补充到C中,因为它们确实非常有用。
有一些C++性能,例如内联(inline)函数和用const代替#define的方法,有时被称为“高级C”性能。有些C和C++共用的编译程序提供了一些这样的性能,你可以使用它们吗?
有些程序员持这样一种看法:如果要写C代码,就只写C代码,并且使它能被所有的C编译程序接受。如果想使用C++性能,那么就转到C++上。你可以循序渐进,每次用一点新的技巧;也可以一步到位,用大量的内联函数,异常处理和转换运算符编写模块化的抽象基类。当你跨过这一步之后,你的程序就是现在的C++程序了,并且你不要指望C编译程序还会接受它。
笔者的看法是:你的工作是从一个新的C标准开始的,这个标准中包含一些C++性能和一些崭新的性能。在以后的几年中,一些编译程序的开发商会去实现这些新的性能的一部分,但这并不能保证所有的编译程序都会去实现这些性能,也不能保证下一个C标准会纳入这些性能。你应该保持对事态发展的关注,当一项新的性能看上去已经真正流行起来,并且不仅仅出现在你现在所使用的编译程序中,而是出现在所有你可能用到的编译程序中时,你就可以考虑使用它了。例如,如果过去有人非要等到1989年才开始使用函数原型,那么这其实就不是一种明智之举;另一方面,在保证可移植性的前提下,过去也没有一个开始使用noalias关键字的最佳时机。
C++中的一些突出性能已被ANSI/ISO C标准委员会所接受,它们不再是“C++扩充功能”,而已经成为C的一部分。例如,函数原型和const关键字就被补充到C中,因为它们确实非常有用。
有一些C++性能,例如内联(inline)函数和用const代替#define的方法,有时被称为“高级C”性能。有些C和C++共用的编译程序提供了一些这样的性能,你可以使用它们吗?
有些程序员持这样一种看法:如果要写C代码,就只写C代码,并且使它能被所有的C编译程序接受。如果想使用C++性能,那么就转到C++上。你可以循序渐进,每次用一点新的技巧;也可以一步到位,用大量的内联函数,异常处理和转换运算符编写模块化的抽象基类。当你跨过这一步之后,你的程序就是现在的C++程序了,并且你不要指望C编译程序还会接受它。
笔者的看法是:你的工作是从一个新的C标准开始的,这个标准中包含一些C++性能和一些崭新的性能。在以后的几年中,一些编译程序的开发商会去实现这些新的性能的一部分,但这并不能保证所有的编译程序都会去实现这些性能,也不能保证下一个C标准会纳入这些性能。你应该保持对事态发展的关注,当一项新的性能看上去已经真正流行起来,并且不仅仅出现在你现在所使用的编译程序中,而是出现在所有你可能用到的编译程序中时,你就可以考虑使用它了。例如,如果过去有人非要等到1989年才开始使用函数原型,那么这其实就不是一种明智之举;另一方面,在保证可移植性的前提下,过去也没有一个开始使用noalias关键字的最佳时机。