-
- long y - объявление локальной переменной (область видимости - текущий файл globals.c) перекрывает глобальную с таким же именем. [code] ucmike(171 знак., 10.09.2015 14:30)
- Ни паверишь! char c; long l; int main(){ c = l; return 0;} Warning = 0; - _basile(10.09.2015 14:55,
)
- Вот то-то и оно! - Олдфаг(10.09.2015 16:23,
)
- Конечно warning = 0. Даже если включить все warning, то не ругнется. Может дать предупреждение "Conversion may lose significant digits" на "c=l+10;" , но откомпилирует (хозяин-барин). - ucmike(10.09.2015 15:31)
- Вот то-то и оно! - Олдфаг(10.09.2015 16:23,
- Ничего оно не перекрывает. Локальная переменная - это переменная, объявленная внутри функции, а здесь одна глобальная переменная y. _basile(63 знак., 10.09.2015 14:45,
)
- А в таком случае: ucmike(85 знак., 10.09.2015 15:59)
- extern типа long, а внутри функции типа char. И локальная char x действительно перекрывает глобальную long x. Но у т.с. другой случай. - _basile(10.09.2015 16:26,
)
- Банально Скрипач(56 знак., 10.09.2015 16:16)
- А пробовал ? - _basile(10.09.2015 16:28,
)
- Да, только что. AvrStudio 4.18 - Скрипач(10.09.2015 16:55 - 16:57)
- У меня gcc пропускает молча. - _basile(10.09.2015 17:25,
)
- Нюансы Скрипач(221 знак., 10.09.2015 17:42)
- У меня gcc пропускает молча. - _basile(10.09.2015 17:25,
- Да, только что. AvrStudio 4.18 - Скрипач(10.09.2015 16:55 - 16:57)
- А пробовал ? - _basile(10.09.2015 16:28,
- extern типа long, а внутри функции типа char. И локальная char x действительно перекрывает глобальную long x. Но у т.с. другой случай. - _basile(10.09.2015 16:26,
- А в таком случае: ucmike(85 знак., 10.09.2015 15:59)
- Ни паверишь! char c; long l; int main(){ c = l; return 0;} Warning = 0; - _basile(10.09.2015 14:55,
- Не асилил, слишкам многа букф IBAH(279 знак., 10.09.2015 09:59 - 10:03)
- А теперь всё то же самое, но "чтоб по 2 раза не описывать переменные" и со структурой, а то говорят это уже на ассемблере проще. - с перламутровыми пуговиц(10.09.2015 10:38,
)
- Ну а развить идею слабо? IBAH(154 знак., 10.09.2015 22:35)
- В вашем случае определение переменной в заголовке изначально порочно. Можете почитать насколько сил хватит Using extern(108 знак., 11.09.2015 00:09,
)
- А вы еще один из тех, кто не читает чужие комментарии _до конца_? - Скрипач(11.09.2015 11:09)
- В вашем случае определение переменной в заголовке изначально порочно. Можете почитать насколько сил хватит Using extern(108 знак., 11.09.2015 00:09,
- Делаю так* Скрипач(377 знак., 10.09.2015 13:02 - 14:21)
- Комментарии - зло! - VL(10.09.2015 15:50,
)
- ...меньшее зло. - Скрипач(10.09.2015 15:52)
- Глюков нет проблеммы есть: синтаксис typedef и непонимание "a" - Petrovich(10.09.2015 14:00,
)
- Исправил. - Скрипач(10.09.2015 14:21)
- Комментарии - зло! - VL(10.09.2015 15:50,
- Ну а развить идею слабо? IBAH(154 знак., 10.09.2015 22:35)
- А теперь всё то же самое, но "чтоб по 2 раза не описывать переменные" и со структурой, а то говорят это уже на ассемблере проще. - с перламутровыми пуговиц(10.09.2015 10:38,
- "С" подразумевает char<=short<=long<=long long misyachniy(140 знак., 09.09.2015 18:05)
- Для этого умные люди придумали префиксы перед именами переменных. u8_x,u64_y; А к компилятору вопросов нема. К линкеру - возможно, но, если он врет - что Вы хотите от бесплатного продукта. - Олдфаг(09.09.2015 17:07,
)
- Этож юникс линкер. Ему так и положено работать. - warn-common(10.09.2015 16:46,
)
- прилВенгерская сущНотация, предлПри числВсем сущУважении предлК собсущВенгрии союзИ местЕе сущЧленстве предлВ прилЕвропейском сущСоюзе союзИ прилДругих прилКрутых сущОрганизациях, глагЯвляется прилПервым сущВрагом сущЧитабельности. - Mahagam(10.09.2015 14:16)
- Зато не пройдёт бесследно присвоение: прилВенгерская = союзИ. А без префикса проскочит мимо внимания. Чуйствуете разницу? - Олдфаг(10.09.2015 16:20,
)
- а варнинги на что? мимо человека эта херня из тыщ строк таки может проскочить, а от компилера никто не увернётся - Mahagam(10.09.2015 16:37)
- А нет варнингов)) Просто нет когда uchar'у присваивание ulong. Не знали? Выше уже обсуждения. - Олдфаг(10.09.2015 18:07,
)
- А нет варнингов)) Просто нет когда uchar'у присваивание ulong. Не знали? Выше уже обсуждения. - Олдфаг(10.09.2015 18:07,
- а варнинги на что? мимо человека эта херня из тыщ строк таки может проскочить, а от компилера никто не увернётся - Mahagam(10.09.2015 16:37)
- Всем это местоимение и даже, наверное, один в значении - некий...(10.09.2015 15:29,
)
- Зато не пройдёт бесследно присвоение: прилВенгерская = союзИ. А без префикса проскочит мимо внимания. Чуйствуете разницу? - Олдфаг(10.09.2015 16:20,
- О нет, на прошлой работе заставляли, народ плевался, неудобочитаемый префикс доходил аж до 5 символов. - Petrovich(10.09.2015 14:13,
)
- Фу! Для этого умные люди придумали другое. Надо объявлять внешние переменные как перед использованием, так и перед определением (как для функций), причём объявление - в единственном числе. И будет сухо и комфортно. - SciFi(09.09.2015 17:15)
- Не поможет этот совет вашим ФуУмнымЛюдям)) Тут же пример: была однобайтовая переменная, назовём её Х. Счётчик какой-нибудь. И перестало его хватать. Сказано сделано, сделали двухбайтовым. Делов-то - в двух местах поменять. Но случилась жёппа. Олдфаг(486 знак., 09.09.2015 17:40,
)
- Явасумоляю. Если кокойты криворукий еблан заменил тип переменной и не проверил все случаи её использования, то тут ничто не поможет кроме кровавого сталена. - SciFi(09.09.2015 18:03)
- Тем более что в коде к несчастью бывают и операции с переменными, как там этот префикс поможет, если происходит переполнение в целочисленной математике? - VL(09.09.2015 18:09,
)
- Тем более что в коде к несчастью бывают и операции с переменными, как там этот префикс поможет, если происходит переполнение в целочисленной математике? - VL(09.09.2015 18:09,
- Явасумоляю. Если кокойты криворукий еблан заменил тип переменной и не проверил все случаи её использования, то тут ничто не поможет кроме кровавого сталена. - SciFi(09.09.2015 18:03)
- По русски это называется включать хедер в сишник с таким же названием. Т.е. в globals.c включить строку #include "globals.h" . - _basile(09.09.2015 17:28,
)
- Именно это имел в виду. За исключением того, что у меня никогда не бывает "globals". Если и есть глобальные переменные, они всегда к какому-нибудь модулю относятся: всегда есть единственный "поставщик" и "потребители". - SciFi(09.09.2015 17:38)
- Это - да. Но, завсегда ручонки чешутся облегчить себе жисть. Почему бы все хедеры проекта не свести в один, и засунуть его во все сишники _basile(494 знак., 09.09.2015 22:46,
)
- Список хедеров - это явный список зависимостей между модулями. Если уж облегчать жизнь, то нужно идти до конца: запихнуть всё в один исходный файл. Да что уж там - в одну функцию. - SciFi(10.09.2015 08:58 - 09:09)
- ...в функцию main. - Скрипач(10.09.2015 09:06)
- Используя goto можно написать любую программу. :-)) - =AlexD=(10.09.2015 09:17)
- --> - fk0(10.09.2015 12:34, ссылка)
- Да, я именно этот случай и имел ввиду :-)) - =AlexD=(10.09.2015 13:06)
- --> - fk0(10.09.2015 12:34, ссылка)
- Используя goto можно написать любую программу. :-)) - =AlexD=(10.09.2015 09:17)
- ...в функцию main. - Скрипач(10.09.2015 09:06)
- Подправлю, чтоб по 2 раза не описывать переменные: VAI(148 знак., 10.09.2015 08:41)
- Раз пошла такая пьянка спрошу на всякий случай. Про tentative definition - не слышали?(10.09.2015 09:29,
)
- Раз пошла такая пьянка спрошу на всякий случай. Про tentative definition - не слышали?(10.09.2015 09:29,
- Список хедеров - это явный список зависимостей между модулями. Если уж облегчать жизнь, то нужно идти до конца: запихнуть всё в один исходный файл. Да что уж там - в одну функцию. - SciFi(10.09.2015 08:58 - 09:09)
- Это - да. Но, завсегда ручонки чешутся облегчить себе жисть. Почему бы все хедеры проекта не свести в один, и засунуть его во все сишники _basile(494 знак., 09.09.2015 22:46,
- Именно это имел в виду. За исключением того, что у меня никогда не бывает "globals". Если и есть глобальные переменные, они всегда к какому-нибудь модулю относятся: всегда есть единственный "поставщик" и "потребители". - SciFi(09.09.2015 17:38)
- То есть берем файл globals.c, там avr495(228 знак., 09.09.2015 17:24)
- Не поможет этот совет вашим ФуУмнымЛюдям)) Тут же пример: была однобайтовая переменная, назовём её Х. Счётчик какой-нибудь. И перестало его хватать. Сказано сделано, сделали двухбайтовым. Делов-то - в двух местах поменять. Но случилась жёппа. Олдфаг(486 знак., 09.09.2015 17:40,
- Этож юникс линкер. Ему так и положено работать. - warn-common(10.09.2015 16:46,
- Так то ж компилятор, а линковать не пробовал ? Компилятор не видит, что там в globals.c. Он для main.c видит только объявы x и y. _basile(95 знак., 09.09.2015 17:01,
)
- Это верно, но без нужды не надо включать заголовки просто так. Это помогло найти а разные чары нет. А уж какие забавные глюки можно ловить со знаковыми и беззнаковыми - char(09.09.2015 19:38,
)
- не, отдельно не линковал, в этом и прикол что все собирается в exe hex молча из всех модулей avr495(58 знак., 09.09.2015 17:15)
- Это верно, но без нужды не надо включать заголовки просто так. Это помогло найти а разные чары нет. А уж какие забавные глюки можно ловить со знаковыми и беззнаковыми - char(09.09.2015 19:38,
- а вам собственно зачем? тоже сталкивался что gcc не ругается, но повторно не наступал на теже грабли. вопрос больше аккуратности. - RED_DRAGON(09.09.2015 16:57)
- ну как сказать, нужны именно глобальные переменные, пишем для контроллера, plain C без плюсов, геттеры-сеттеры наворачивать на каждую переменную? ну не знаю. посоветуйте! - avr495(09.09.2015 17:03)
- Тебе ж VL уже все посоветовал. Посмотри примеры в сети, как взрослые дяди пишут. - _basile(09.09.2015 17:21,
)
- MISRA C? - avr495(09.09.2015 17:54)
- мисра - это
серпом по яйцамиз пушки по воробьям. - SciFi(09.09.2015 18:04)
- мисра - это
- MISRA C? - avr495(09.09.2015 17:54)
- Тебе ж VL уже все посоветовал. Посмотри примеры в сети, как взрослые дяди пишут. - _basile(09.09.2015 17:21,
- ну как сказать, нужны именно глобальные переменные, пишем для контроллера, plain C без плюсов, геттеры-сеттеры наворачивать на каждую переменную? ну не знаю. посоветуйте! - avr495(09.09.2015 17:03)
- А если включить в глобалс его же хэдер? - VL(09.09.2015 16:45,
)
- Подозреваю что компилятор пропускает это справедливо, т.к. модули отдельные и противоречий нету, а вот линкер не умеет следить за типами данных extern переменных - avr495(09.09.2015 16:56)
- да, компилятор просто резервирует место в памяти. а как оно потом используется тут не его дело. - RED_DRAGON(09.09.2015 16:59)
- Если включить его же хедер справедливо ругается! А почему так? avr495(37 знак., 09.09.2015 16:50)
- Подозреваю что компилятор пропускает это справедливо, т.к. модули отдельные и противоречий нету, а вот линкер не умеет следить за типами данных extern переменных - avr495(09.09.2015 16:56)
- long y - объявление локальной переменной (область видимости - текущий файл globals.c) перекрывает глобальную с таким же именем. [code] ucmike(171 знак., 10.09.2015 14:30)