реклама на сайте
подробности

 
 
> IAR пропустил одинаковое объявление переменной
misyachniy
сообщение Nov 27 2014, 17:37
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



При подчистке программы обнаружил, что переменная объявлена 2 раза, но компилятор пропустил без предупреждений.
Прикрепленное изображение


Я то стер одно объявление, но почему компилятор пропустил не понимаю.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
scifi
сообщение Nov 27 2014, 19:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



При споре компилятора с человеком в 99% случаев прав оказывается компилятор. И приложенная картинка непонятно какое отношение к чему-либо вообще имеет :-)
Go to the top of the page
 
+Quote Post
SSerge
сообщение Nov 27 2014, 19:52
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Где переменная?
Не вижу там ни одной переменной.
На картинке вообще перечень путей для поиска инклюдов.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
psL
сообщение Nov 27 2014, 20:02
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



на картинке вообще эклипс. Затмение то есть wink.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 27 2014, 20:42
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(psL @ Nov 27 2014, 23:02) *
на картинке вообще эклипс. Затмение то есть wink.gif

О! Теперь всё приобрело смысл! :-)
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Nov 27 2014, 20:46
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(psL @ Nov 27 2014, 22:02) *
на картинке вообще эклипс. Затмение то есть wink.gif


Троллинг удался :-)
В предварительном просмотре сообщения не отображается картика.

Выкладываю правильную картинку.
По эклипсу тоже вопрос по поводу невозможности удаления путей.
Но он с другой оперы.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Nov 27 2014, 20:56
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Кто тебе сказал, что это запрещено?
Если бы определения были разными, тогда была бы ошибка.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 27 2014, 21:00
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Dr.Alex @ Nov 27 2014, 23:56) *
Кто тебе сказал, что это запрещено?
Если бы определения были разными, тогда была бы ошибка.

+1. Попробовал в gcc - тоже не ругается. А вот если инициализировать другим значением или объявить с другим типом - ругается. Компилятор всё правильно сделал, ящетаю.
Могу нанять юристов для прочтения спеки и написания научно обоснованного заключения, если бабла подкинете :-)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 27 2014, 21:12
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В Keil, однако, такое не прокатило.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 27 2014, 21:17
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Nov 28 2014, 00:12) *
В Keil, однако, такое не прокатило.

И этот компилятор всё правильно сделал, ящетаю. Другими словами, undefined behavior :-)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 28 2014, 08:17
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



А теперь попробуйте разнести по разным файлам.
rolleyes.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 28 2014, 08:38
Сообщение #12


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(MrYuran @ Nov 28 2014, 11:17) *
А теперь попробуйте разнести по разным файлам.
rolleyes.gif

xxxx.axf: Error: L6200E: Symbol xxx multiply defined (by xx.o and x.o).
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 28 2014, 08:42
Сообщение #13


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(ViKo @ Nov 28 2014, 12:38) *
xxxx.axf: Error: L6200E: Symbol xxx multiply defined (by xx.o and x.o).

То есть, в пределах одной единицы компиляции при множественном объявлении образуется один объект, а если объявить в разных файлах - два, на которые потом ругается линкер.

Интересно, что будет при использовании флага -combine


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 28 2014, 08:53
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А сегодня в одном файле - прокатило. А-а-а!!!

Цитата(MrYuran @ Nov 28 2014, 11:42) *
Интересно, что будет при использовании флага -combine

Keil такого не принимает.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 28 2014, 09:27
Сообщение #15


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ Nov 28 2014, 12:42) *
..если объявить в разных файлах - два, на которые потом ругается линкер.
Он может и не ругаться (во всяком случае по стандарту).
Более того он выделит под переменные из разных файлов с одинаковым именем общую память.
И можно очень весело проводить время, отлаживая проект из двух файлов, скажем такого содержания.
Код
int a;
и
Код
char a;

Именно для этого случая Си и предоставляет инструмент в виде ключевого слова static.
И если глобальная переменная внутри модуля не представлена в его интерфейсе (в заголовочном файле как extern), то она обязана иметь квалификатор static.
Всё остальное - просто неграмотно.

Цитата(ViKo @ Nov 28 2014, 12:53) *
Keil такого не принимает.
Естественно. Более того и для gcc это является атавизмом после появления ключика -flto.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.07623 секунд с 7
ELECTRONIX ©2004-2016