Vlad Harchev <[EMAIL PROTECTED]> writes: > > > Более оптимальный вариант > > > enum { NULL = 0 }; > > > > Ничего подобного. Ваш enum полностью эквивалентен тому, если вы в хедере > > напишете > > > > const int NULL = 0; > > > > Не надо никаких extern'ов городить. extern'ы подразумевают external > > linkage в C++, что, разумеется, приводит к выделению памяти. ;-) > > const int NULL = 0; > > _приводит_ к выделению памяти, по крайне мере у gcc. Только что проверял с > помощью nm (написал программу из двух модулей, в каждом из которых было > const int _NULL = 0; > , собрал ее; nm сказал что есть две переменных с именем _NULL с различными > адресами памяти. А насчет extern'ов - вы правы - их не надо упортреблять - > тогда компилятор будет знать значение константы и будет подставлять ее > значение напрямую.
Разумеется приводит, поскольку у этого NULL будет external linkage. Правильно писать static const int NULL = 0; Вот тогда компилятор память выделять не будет и получится константа, аналогичная объявленной в enum, только созданная предназначенными для этого языковыми средствами. Попробуй, например, сделать enum'ом что-то вроде static const float ImportantValue = 0.99999; :-) Hope to hear from you soon, Dmitry