Форум: "Прочее";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
ВнизИнициализация переменных в С Найти похожие ветки
← →
Riply © (2007-12-16 22:40) [0]Здравствуйте !
А в С, при объявлении переменные часом сами не инициализируются нулями ?
А то какие-то странные исходники смотрю :)
← →
homm © (2007-12-16 22:43) [1]> [0] Riply © (16.12.07 22:40)
> А то какие-то странные исходники смотрю :)
Дак и нам дай посмотреть, точно скажем :)
← →
homm © (2007-12-16 22:43) [2]В общем случае нет, но переменная можт быть объявлена как статичная, тогда при старте приложения в ней бет ноль вроде бы.
← →
boa_kaa © (2007-12-16 22:44) [3]
> Riply © (16.12.07 22:40)
если C без #, то они ничем не инициализируются
← →
Zeqfreed © (2007-12-16 22:52) [4]http://publications.gbdirect.co.uk/c_book/chapter6/initialization.html
Unless they have an explicit initializer, all objects with static duration are given implicit initializers—the effect is as if the constant 0 had been assigned to their components. This is in fact widely used—it is an assumption made by most C programs that external objects and internal static objects start with the value zero.
← →
Alkid (2007-12-16 23:08) [5]С++:
Статические по умолчанию инициализируются нулями.
Стековые по умолчанию не инициализируются.
Динамические не инициализируются никак.
В С вроде так же.
← →
etc (2007-12-16 23:14) [6]вырежут, но истина дороже :)
почему этот топик не вопрос в "интелектуальный яндекс"?
← →
Riply © (2007-12-16 23:15) [7]Спасибо всем !
← →
homm © (2007-12-16 23:26) [8]> [7] Riply © (16.12.07 23:15)
> Спасибо всем !
Дак как там на самом деле? Статические были?
← →
Petr V. Abramov © (2007-12-16 23:39) [9]> homm © (16.12.07 23:26) [8]
в экпериментах, котрые ставила ув. Riply © были похожи не статические :)
← →
J_f_S (2007-12-17 01:54) [10]В зависимости от опций компиллятора, (например, если строишься в дебаге), могут быть проинициализированы и стековые(локальные) переменные, причем совсем не обязательно нулями. Если мне склероз не изменяет, то MSVS инициализирует память последовательностью 0x0C.
← →
Германн © (2007-12-17 02:00) [11]
> J_f_S (17.12.07 01:54) [10]
>
> В зависимости от опций компиллятора, (например, если строишься
> в дебаге), могут быть проинициализированы и стековые(локальные)
> переменные, причем совсем не обязательно нулями. Если мне
> склероз не изменяет, то MSVS инициализирует память последовательностью
> 0x0C.
>
Хм. А зачем забивать память значениями 0х0С?
← →
J_f_S (2007-12-17 02:12) [12]
> Хм. А зачем забивать память значениями 0х0С?
Нули не особо много говорят при отладке, на самом деле, поскольку не понятно, кто проинициализировал память - сам программист, или компиллятор. И при попытке собраться в релизе вроде бы корректные на этапе дебага значения переменных превращаются в результат работы генератора случайных чисел. Если при отладке видишь в какой-то переменной что-то типа 0x0C то сразу ясно, где работал компиллятор, и где не доработал программист.
Тоже не панацея, конечно, но немного проще.
← →
Германн © (2007-12-17 02:24) [13]
> J_f_S (17.12.07 02:12) [12]
>
>
> > Хм. А зачем забивать память значениями 0х0С?
>
> Нули не особо много говорят при отладке, на самом деле,
> поскольку не понятно, кто проинициализировал память - сам
> программист, или компиллятор.
Имхо, передергиваешь.
← →
J_f_S (2007-12-17 02:49) [14]Не 0x0C, а 0xCC.
И в дебаге MSVC инициализирует и память, выделенную динамически, вот.
← →
Германн © (2007-12-17 02:52) [15]
> J_f_S (17.12.07 02:49) [14]
>
> Не 0x0C, а 0xCC.
>
> J_f_S (17.12.07 01:54) [10]
>
> В зависимости от опций компиллятора, (например, если строишься
> в дебаге), могут быть проинициализированы и стековые(локальные)
> переменные, причем совсем не обязательно нулями. Если мне
> склероз не изменяет, то MSVS инициализирует память последовательностью
> 0x0C.
>
Как прикажешь понимать тебя, Саид?
:)
← →
Германн © (2007-12-17 03:06) [16]
> И в дебаге MSVC инициализирует и память, выделенную динамически,
> вот.
>
А это зачем? Чтобы "скрыть ошибки автора программы" ?
← →
KSergey © (2007-12-17 09:58) [17]> Riply © (16.12.07 22:40)
Вот у меян только один вопрос: имеется в виду именно Си или Си с плюсами? Нельзя ли уточнять в будущем?
← →
homm © (2007-12-17 10:00) [18]> [17] KSergey © (17.12.07 09:58)
> имеется в виду именно Си или Си с плюсами?
А что, в сабже не написано? Нельзя ли читать в следующий раз?
← →
KSergey © (2007-12-17 10:06) [19]> homm © (17.12.07 10:00) [18]
> А что, в сабже не написано? Нельзя ли читать в следующий раз?
Написано. Но имею некоторые сомнения без уточнения.
← →
homm © (2007-12-17 10:08) [20]> [19] KSergey © (17.12.07 10:06)
> Но имею некоторые сомнения без уточнения
Никак не могу взять в толк, что есть уточнение… Ладно, флуд все это.
← →
Kerk © (2007-12-17 10:09) [21]0хСС - это код брекпоинта, 3е вроде прерывание
← →
KSergey © (2007-12-17 10:10) [22]> homm © (17.12.07 10:08) [20]
> Никак не могу взять в толк, что есть уточнение…
"Си без плюсов"
Ну просто интересно все же что имела в виду автор.
← →
Игорь Шевченко © (2007-12-17 10:44) [23]нет, не инициализируются
← →
clickmaker © (2007-12-17 11:30) [24]в дебаге (MS VS 2003, по крайней мере) локальные переменные инициализируются нулями.
Это может вызвать забавный казус, когда релиз вызывает AV, а начинаешь отлаживать - он пропадает )
← →
Zeqfreed © (2007-12-17 11:30) [25]> KSergey © (17.12.07 10:10) [22]
Ага, а так же Паскаль, который не объектный и Ява, которая не скрипт.
← →
boa_kaa © (2007-12-17 12:53) [26]
> Alkid (16.12.07 23:08) [5]
это поэтому C++ требует обязательной инициализации членов класса в конструкторе?
← →
Alkid © (2007-12-17 13:07) [27]
> это поэтому C++ требует обязательной инициализации членов
> класса в конструкторе?
А он таки их требует? :)
На самом деле в списке инициализации конструктора *требуется* указывать только те подобъекты, которые не имеют дефолтных консткукторов (т.е. не имеющих параметров). Те, у которых они есть можно указывать, а можно и не указывать.
пример:class A
{
private:
int field;
public:
A(int i) // ошибки не будет, но поле field останется непроинициализированным
{
}
}
class B
{
private:
A a;
public:
B() : a(10) // без этого инициализатора программа не скомпилируется, ибо
// клас A не имеет дефолтного конструктора.
{
}
}
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.042 c