ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
96978 Топик полностью
ReAl (15.08.2007 10:29, просмотров: 204) ответил Gamma SPb на я не знаю, чего вы там поняли, я имел в виду, что gcc и RealView такие же "специфические" компиляторы как и IAR
Да НЕ НУЖНО. Я завёл указатели для того, чтобы показать - конфликта между разными модулями нет ДАЖЕ в том случае, когда память выделена. Вам, похоже, тоже трудно понять чужие слова. Если адрес не брать - то память не выделдяется ВООБЩЕ, константа встраивается в код так же, как если бы она была написана через define или enum. А почему это не работает в используемых Вами компиляторах - разбирайтесь сами. Возможно, прав Мусин и Вы проверяете в С-режиме то, что обсуждается для С++. Тогда Вы вообще не поняли, о чём речь в этой теме. Про plain C - не надо, не надо. Я давно сказал, что это не для него, что если компилируется в режиме С, то и память выделяется, и конфликты возникат. Эта тема с самого начала имела ввиду С++ - гляньте внимательно первый пост. "констовый" массив не есть замена нетипизированных констант, введённых через #define (ещё раз гляньте внимательно первый пост - о чём разговор) и поэтому не стоит искать то место, которое даже не обсуждалось, но в котором Вы правы. А уж #define-то как раз и ругается как "тяжёлое наследие С". Кстати, даже старючий борландовский компилятор тело сгенерировал только для того, чтобы адрес от него взять, а в код при вызове оператора вывода вставил push 5 - т.е. использовал константу как константу. Кстати, если от инлайн-функции взять адрес, то для неё тоже гарантированно сгенерируется отдельно стоящее тело. Но тоже - область видимости ограничится файлом, конфликта не будет. Причём, насколько я помню, это дело (в отличие от const) одинаково и в С стандарта 1999 года, и в С++.