第二版ROS学习指南
4.3 清除定义块在C中,我们总要在一个程序块的左括号一开始就定义好所有的变量,这在程序设计语言中不算少见(Pascal中例外),其理由无非是因为“这是一个好的编程风格”。在这点上,我有自己的看法。我认为它总是给我带来不便。作为一个程序员,每当我需要增加一个变量时我都得跳到块的开始,我发现如果变量定义紧靠着变量的使用处时,程序的可读性更强。也许这些争论具有一定的普遍性。
在C++中,是否一定要在块的开头就定义所有变量成了一个很突出的问题。如果存在构造函数,那么当对象产生时它必须首先被调用,如果构造函数带有一个或者更多个初始化参数,我们怎么知道在块的开头定义这些初始化信息呢?在一般的编程情况下,我们做不到这点,因为C中没有私有成员的概念。这样很容易将定义与初始化部分分开,然而C++要保证在一个对象产生时,它同时被初始化。这可以保证我们的系统中没有未初始化的对象。C并不关心这些。事实上,C要求我们在块的开头就定义所有变量,在我们还不知道一些必要的初始化信息时,就要求我们这样做是鼓励我们不初始化变量。通常,在C++中,在还不拥有构造函数的初始化信息时不能创建一个对象,所以不必在块的开头定义所有变量。
事实上,这种语言风格似乎鼓励我们把对象的定义放得离使用点尽可能近一点。在C++中,对一个对象适用的所有规则,对预定义类型也同样适用。这意味着任何类的对象或者预定义类型都可以在块的任何地点定义。这也意味着我们可以等到我们已经知道一个变量的必要信息时再去定义它,所以我们总是可以同时定义和初始化一个变量。
如果你对C语言中定义变量的风格感兴趣,可以参考C语言定义整型变量或者更深入了解C语言编程风格。你会发现,这些风格指南不仅仅是为了规范程序员的行为,更是为了提高代码的可读性和可维护性。而关于变量的定义和类型详解,可以通过C语言变量的定义和类型详解获得更多细节。
是不是觉得有些规定过于繁琐?或者说,这种写法真的让你感觉到困扰?无论如何,掌握这些编程风格和规则,最终会帮助你写出更可靠、更高效的代码。