|
Multiple definitions, в Keil (компилер GCC) |
|
|
|
 |
Ответов
(1 - 10)
|
Feb 2 2007, 15:28
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(VDG @ Feb 2 2007, 15:22)  Цитата(Leen @ Feb 2 2007, 06:24)  multiple definition of `USB_GetState'
Это недоделка компилятора. Например в CV тоже самое. #define действует в пределах файла (по хорошему он должен действовать в пределах проекта), и _(имя_файла)_H из других файлов невиден. Поэтому возникает ошибка "пере/мульти-определения". не понял, с чего бы это #define из h-файла должен быть виден в пределах всего проекта??
|
|
|
|
|
Feb 2 2007, 15:51
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(VDG @ Feb 2 2007, 15:38)  Цитата(sergik_vrn @ Feb 2 2007, 15:28)  не понял, с чего бы это #define из h-файла должен быть виден в пределах всего проекта??
Для того чтобы хидер подключить только единожды. Как в VisualC++. ЗЫ. В данном случае, действительно дело в инлайне. Иначе бы вылезли и другие ошибки, так как там есть и другие объявления. позвольте с Вами категорически не согласиться. не знаю уж, как там в visual c++, но в нормальном с++, и тем более в с это будет противоречить всей концепции языка! построенной на принципе раздельной компиляции. не вдаваясь в рассуждения о том, хорошо это или плохо, но это так, и обсуждению не подлежит. что касается рассматриваемого вопроса, то там все понятно и люди внятно ответили - если бы inline выполнялся правильно, то не было бы никаких проблем. подозреваю даже, что это не вина компилятора, а просто автор кода напрасно изменил значение inline с помощью непонятного определения _inline
|
|
|
|
|
Feb 2 2007, 20:21
|

Знающий
   
Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193

|
серджик_врн, Не хочется выглядеть "к каждой бочке затычкой" и в ответ "категорически не соглашаться", создавая офтоп на пустом месте. Приведу только кусок кода для хедера, объясняющий зачем это нужно и как это удобно применять. Если это противоречит вашему понятию "всей концепции языка", то пора бы эту концепцию подучить  А о незнании VC программисту лучше смолчать, а не программистам тем более. #if !defined(AFX_ENTERDLG_H__D4A31FE2_9E8C_11D8_964F_D72B7675A5C0__INCLUDED_) #define AFX_ENTERDLG_H__D4A31FE2_9E8C_11D8_964F_D72B7675A5C0__INCLUDED_ ... основной текст хедера #endif // !defined(AFX_ENTERDLG_H__D4A31FE2_9E8C_11D8_964F_D72B7675A5C0__INCLUDED_)
--------------------
|
|
|
|
|
Feb 2 2007, 21:00
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Если уж на то пошло, #define это директива препроцессора и никакой области видимости она не имеет и никакой сущности в программе не отображает. Это просто способ управления процессом компиляции. Цитата Если это противоречит вашему понятию "всей концепции языка", то пора бы эту концепцию подучить А о незнании VC программисту лучше смолчать, а не программистам тем более. Я б сказал кому стоит подучить концепцию. Тем более VC это очень частный случай и какие нибудь Юникс-гуру могли ни разу его и не запускать  Тем более в сабже стоит - GCC
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|