Вход на сайт
Тупой вопрос по С: инитиализация структуры
NEW 12.06.09 16:56
Если у меня есть array, то я могу его инитиализировать, не определя всех элементов
int myArr[5] = {0};
myArr[1]= myArr[2]=..=0;
это по оределению.
А если у меня есть структура и я указал
struct myStr {
int a;
int b;
char* c;
} myStrVar = {0};
то какое значение будет у myStrVar.b; myStrVar.c ?
Обнулится ли?
Не особо хочу примеры: "А у себя на компьютере я так проверил и получил..."
Меня не интересует имплементация на данном компьютере, а интересует, что по этому поводу говорит стандарт, K&R, etc.
Спасибо...
int myArr[5] = {0};
myArr[1]= myArr[2]=..=0;
это по оределению.
А если у меня есть структура и я указал
struct myStr {
int a;
int b;
char* c;
} myStrVar = {0};
то какое значение будет у myStrVar.b; myStrVar.c ?
Обнулится ли?
Не особо хочу примеры: "А у себя на компьютере я так проверил и получил..."
Меня не интересует имплементация на данном компьютере, а интересует, что по этому поводу говорит стандарт, K&R, etc.
Спасибо...
NEW 17.06.09 12:32
в ответ AlexOtt 17.06.09 12:19
??? - memset() стало конструктором? А нельзя ли его еще и виртуальным сделать? 
Автор спросил - Как написано в Cтандартах или у Великих? - как написано у K&R Я ответил.
Как реализовано в конкретном компиляторе - надо смотреть, тестить и, возможно, юзать
memset()...

Автор спросил - Как написано в Cтандартах или у Великих? - как написано у K&R Я ответил.
Как реализовано в конкретном компиляторе - надо смотреть, тестить и, возможно, юзать
memset()...
NEW 17.06.09 17:36
в ответ Kabal 17.06.09 15:07
В стандарте написано вот что:
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these rules.
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) zero;
— if it is an aggregate, every member is initialized (recursively) according to these rules;
— if it is a union, the first named member is initialized (recursively) according to these rules.
NEW 17.06.09 17:47
в ответ Kabal 17.06.09 15:07
Пратта и Ко
http://www.library.ospu.odessa.ua/online/books/c/12.htm
Цитата из стандарта по С++
http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m=128916
По K&R - читай 6.3. Массивы сруктур
http://www.library.ospu.odessa.ua/online/books/c/12.htm
Цитата из стандарта по С++
http://bugtraq.ru/cgi-bin/forum.mcgi?type=sb&b=2&m=128916
По K&R - читай 6.3. Массивы сруктур
NEW 17.06.09 21:22
в ответ AlexOtt 17.06.09 20:52
static int a;
------
Обратись к оригинальному вопросу - он несколько отличается от того,
об чем ты пытаешься написать.
производится одной командой
-----
Когда - одной, когда - несколькими, случается - запросом к системе -
все зависит от реализации...
которая просто уменьшает соответствующий указатель çтека
------
Насколько Я помню, есть системы где стек "растет" в другую сторону.
Кроме этого, есть системы в которых стек вообще не существует...
------
Обратись к оригинальному вопросу - он несколько отличается от того,
об чем ты пытаешься написать.
производится одной командой
-----
Когда - одной, когда - несколькими, случается - запросом к системе -
все зависит от реализации...
которая просто уменьшает соответствующий указатель çтека
------
Насколько Я помню, есть системы где стек "растет" в другую сторону.
Кроме этого, есть системы в которых стек вообще не существует...
NEW 17.06.09 21:33
Да, обнулится:
В ответ на:
А если у меня есть структура и я указал
А если у меня есть структура и я указал
struct myStr {
int a;
int b;
char* c;
} myStrVar = {0};
то какое значение будет у myStrVar.b; myStrVar.c ? Обнулится ли?
Да, обнулится:
В ответ на:
C99 (ISO/IEC 9899:1999) - 6.7.8 Initialization - 21
If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
C99 (ISO/IEC 9899:1999) - 6.7.8 Initialization - 21
If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
В ответ на:
C99 (ISO/IEC 9899:1999) - 6.7.8 Initialization - 10
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:
- if it has pointer type, it is initialized to a null pointer;
- if it has arithmetic type, it is initialized to (positive or unsigned) zero;
- if it is an aggregate, every member is initialized (recursively) according to these rules;
- if it is a union, the first named member is initialized (recursively) according to these rules.
C99 (ISO/IEC 9899:1999) - 6.7.8 Initialization - 10
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:
- if it has pointer type, it is initialized to a null pointer;
- if it has arithmetic type, it is initialized to (positive or unsigned) zero;
- if it is an aggregate, every member is initialized (recursively) according to these rules;
- if it is a union, the first named member is initialized (recursively) according to these rules.
06.07.09 15:26
в ответ KwtH 06.07.09 11:49
какие?
-----
Хммм... IBM360\370 устроит? Насколько Я помню - обходились без выделенного стека.
Правда, большинство языков использовавшихся на ней - не допускают рекурсии.
автоматические переменные куда кладут тогда?
-----
Выделяют, назначая базовый и индексный регистры. Детали - надо смотреть по конкретной
реализации.
пишут по верху когда места нет?
------
Там есть аппаратный контроль по дескриптору задачи...
а что тогда со статикой?
-----
С нею - проще всего - разок размещена и все... Правда загрузчик еще распишет выделенную
область специфическим кодом - для отслеживания неиспользованной памяти...
-----
Хммм... IBM360\370 устроит? Насколько Я помню - обходились без выделенного стека.
Правда, большинство языков использовавшихся на ней - не допускают рекурсии.
автоматические переменные куда кладут тогда?
-----
Выделяют, назначая базовый и индексный регистры. Детали - надо смотреть по конкретной
реализации.
пишут по верху когда места нет?
------
Там есть аппаратный контроль по дескриптору задачи...
а что тогда со статикой?
-----
С нею - проще всего - разок размещена и все... Правда загрузчик еще распишет выделенную
область специфическим кодом - для отслеживания неиспользованной памяти...
NEW 06.07.09 18:10
в ответ Murr 06.07.09 15:26
ну как же, помню. я правда работал с советской серией ЕС, но это были копии ИБМ.
но вроде бы там стек был, по кр мере я так считал тогда))) может ошибаюсь, спорить не буду, на ассемблере работал только на ПК
возможно его организация была на низком уровне не такой как в ПК, но думаю что сути это не меняет.
но вроде бы там стек был, по кр мере я так считал тогда))) может ошибаюсь, спорить не буду, на ассемблере работал только на ПК
возможно его организация была на низком уровне не такой как в ПК, но думаю что сути это не меняет.
NEW 06.07.09 20:10
в ответ KwtH 06.07.09 18:10
но вроде бы там стек был, по кр мере я так считал тогда
------
Там нет методов адресации используемых при работе со стеком.
на низком уровне не такой как в ПК
------
угу... 16 полностью равноправных 32-х-разрядных регистра...
на ассемблере работал только на ПК
------
Мне "не повезло" - с десяток различных аппаратных архитектур...
...и что еще хуже - обязательный курс построения процессоров
со всеми возможными извращениями в качестве лаб/курсовых...
------
Там нет методов адресации используемых при работе со стеком.
на низком уровне не такой как в ПК
------
угу... 16 полностью равноправных 32-х-разрядных регистра...
на ассемблере работал только на ПК
------
Мне "не повезло" - с десяток различных аппаратных архитектур...
...и что еще хуже - обязательный курс построения процессоров
со всеми возможными извращениями в качестве лаб/курсовых...
