Объявлением. Если ты написал const, значит 100% не будешь туда писать (компилятор не даст). Сумел обмануть компилятор- ССЗБ. А если не написал- значит туда будут писать.
Вид для печати
>такие сокращения у нас не в обиходе.
Зато на ЛОРе вполне себе употребимы =)
>Если ты написал const
Тут понятно, компилер может с константными данными извращаться как хочет, а если const нет? Вот как изначальном вопросе о надобности инициализации, зачем копировать, если данные уже лежат? Пиши - не хочу.
Вот написал ты такое:
и действующий по твоим заветам компилятор создаст две копии данных строки- использование общих данных будет невозможно. А при копировании сработает обычный string pooling.Код:static char text1[] = "very long text string ...";
static char text2[] = ... //то же самое
>компилятор создаст две копии данных строки
Дык в твоём примере это и подразумевается!
>обычный string pooling
Хотяяя... Как я понял погуглив(а попадалась увы одна *****я жаба), при string pooling'е если мы объявим char s1[]="bla-bla-bla";char s2[]="bla-bla-bla"; то они будут указывать на один адрес? Но тогда при объявлении их static как раз разные адреса и должны получиться?
Кому реально нужно, есть "Feature request" и "Bugs" на трекере проекта.
Да, две копии. А разве не так и должно быть? Какое его сообачье дело, что я пишу в строках - разное оно или одинаковое? Зачем считать пользователя кретином, пишушим в разных строках одно и то же исключительно от невнимательности? Если я для второй строки захочу общих данных с первой, я напишу что-то типа
static char *text2 = &text1[0];
и не надо будет никакой самодеятельности компилятора.
Большинство CP/M-компиляторов С, кстати, такой идиотской инициализации как в SDСС не имеют, и десятки лет на них прекрасно программируют. Кстати, последний SDCC не может собрать работоспособный код из исходников, прекрасно собирающихся при помощи hitech C 3.09 образца 1986 года. Я в итоге от SDCC отказался - устал подбирать его какашки.