Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CQG / Задание1 / HDS_VCPP_Programming Rules.doc
327.68 Кб


Rule 51.Each declared variable must be given a value before it is used.

Exception:Instances of a class are initialized by a class constructor. Therefore, it is not required to initialize them explicitly.

Rec. 52.If possible, always use initialization instead of assignment.

Rec. 53.Variables should be declared with the smallest possible scope.

Rec. 54.Each variable should be declared in a separate declaration statement.

A variable must always be initialized before use. Normally, the compiler gives a warning if a variable is undefined. It is then sufficient to take care of such cases. Instances of a class are usually initialized even if no arguments are provided in the declaration (the empty constructor is invoked). To declare a variable that has been initialized in another file, the keyword externis always used.

By always initializing variables, instead of assigning values to them before they are first used, the code is made more efficient since no temporary objects are created for the initialization. For objects having large amounts of data, this can result in significantly faster code. See Example 47.

A variable should be declared with the smallest possible scope to improve the readability of the code and to avoid its unnecessary allocation. When a variable declared at the beginning of a function is used somewhere in the code, it is not easy to directly see the type of the variable. In addition, there is a risk that such a variable is inadvertently hidden if a local variable, having the same name, is declared in an internal block. See Example 48.

Many local variables are only used in special cases that seldom occur. If a variable is declared at the outer level, memory will be allocated even if it is not used. In addition, when variables are initialized upon declaration, more efficient code is obtained than if values are assigned when the variable is used.

In certain special cases, the value of a complicated expression is assigned to a variable; it may then be unnecessary to give the variable an initial value. See Example 47.

Pointers and References

Rule 52.Do not compare a pointer to0or assign0to a pointer; useNULLinstead.

Rec. 55.Pointers to pointers should be avoided whenever possible.

Rec. 56.Use atypedefto simplify program syntax when declaring function pointers.

NULLis the null-pointer value used with many pointer operations and functions. It is recommended usingNULLinstead of0to make the code more readable. SeeExample 49.

Pointers to pointers normally should not be used. Instead, a class that has a member variable of the pointer type should be declared (see Example 50). This improves the readability of the code and encourages data abstraction. By improving the code readability, the probability of failure is reduced. One exception to this recommendation is represented by functions that provide interfaces to other languages (such as C or COM interfaces). These should likely allow only pre-defined data types to be used as arguments in the interface, and, therefore, pointers to pointers are needed. Another example is the second argument to themainfunction that should have the typechar*[].

A function that changes the value of a pointer that is provided as an argument, should declare the argument as having the type reference to pointer (e.g. int*&). SeeRec. 44.

A type declaration is a good way of making code more easily maintainable and portable. Another reason to use typedefis that the code readability is improved. If pointers to functions are used, the resulting code can be almost unreadable. By making a type declaration for the function type, this is avoided. SeeExamples 51and52.

Function pointers can be used as ordinary functions; they do not need to be dereferenced. See Example 52.