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

 
 
> Keil и с99, не работает
sidy
сообщение Oct 29 2012, 14:25
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Здравствуйте, уважаемые форумчане. В проекте, созданном в Keil MDK-ARM 4.54 есть три файла main.c. pwm.h и pwm.c. В файле pwm.h объявленна переменная i. При добавлении в main.c и pwm.c строки #include "pwm.h" возникает ошибка: Proj.axf: Error: L6200E: Symbol i multiply defined (by main.o and pwm.o). В опциях проекта C/C++ в строке Misc Controls задано --С99. Как я понимаю в с99 можно объявлять переменную в нескольких местах, а на этапе компиляции переменная заменится одной. Но почему-то не удается. Подскажите пожалуйста, что я делаю не так?

Сообщение отредактировал sidy - Oct 29 2012, 14:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Артём_
сообщение Oct 29 2012, 14:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(sidy @ Oct 29 2012, 16:25) *
Здравствуйте, уважаемые форумчане. В проекте, созданном в Keil MDK-ARM 4.54 есть три файла main.c. pwm.h и pwm.c. В файле pwm.h объявленна переменная i.

Как объявлена?
Код
int i;

или
Код
extern int i;

?
Второй вариант допустим.
Цитата(sidy @ Oct 29 2012, 16:25) *
При добавлении в main.c и pwm.c строки #include "pwm.h" возникает ошибка: Proj.axf: Error: L6200E: Symbol i multiply defined (by main.o and pwm.o).

Так и должно быть: если "pwm.h" инклудится в оба Си-шных файла, то переменная i получается объявленной в обеих файлах. И получаете ошибку.

Цитата(sidy @ Oct 29 2012, 16:25) *
В опциях проекта C/C++ в строке Misc Controls задано --С99.

С99 здесь нипричом.

Цитата(sidy @ Oct 29 2012, 16:25) *
Как я понимаю в с99 можно объявлять переменную в нескольких местах, а на этапе компиляции переменная заменится одной.

Это как? Приведите пример...

Цитата(sidy @ Oct 29 2012, 16:25) *
Подскажите пожалуйста, что я делаю не так?

Объявляйте переменные в с-файлах:
pwm.c
Код
int SomeVar;


pwm.h
Код
#ifndef _PWM_H_
#define _PWM_H_

extern int SomeVar;

#endif
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 30 2012, 08:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(_Артём_ @ Oct 29 2012, 17:35) *
Это как? Приведите пример...
Есть такая буква в С (но не в С++!)
Стандарт C99, параграф 6.9.2 External object definitions
Цитата
2 A declaration of an identifier for an object that has file scope without an initializer, and
without a storage-class specifier or with the storage-class specifier static, constitutes a
tentative definition. If a translation unit contains one or more tentative definitions for an
identifier, and the translation unit contains no external definition for that identifier, then
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.

Параграф 6.2.2 Linkages of identifiers
Цитата
1 An identifier declared in different scopes or in the same scope more than once can be
made to refer to the same object or function by a process called linkage.21) There are
three kinds of linkage: external, internal, and none.

2 In the set of translation units and libraries that constitutes an entire program, each
declaration of a particular identifier with external linkage denotes the same object or
function. Within one translation unit, each declaration of an identifier with internal
linkage denotes the same object or function. Each declaration of an identifier with no
linkage denotes a unique entity.


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sidy   Keil и с99   Oct 29 2012, 14:25
- - sidy   Спасибо за разъяснение. А что означает _PWM_H_?   Oct 29 2012, 15:04
|- - _Артём_   Цитата(sidy @ Oct 29 2012, 17:04) Спасибо...   Oct 29 2012, 15:18
|- - SyncLair   Цитата(sidy @ Oct 29 2012, 19:04) Спасибо...   Oct 29 2012, 15:34
- - sidy   Вот вот Параграф 6.2.2 Linkages of identifiers. Вс...   Oct 30 2012, 10:15
|- - XVR   Цитата(sidy @ Oct 30 2012, 13:15) Все же ...   Oct 30 2012, 18:31
- - sidy   По ссылке http://www.keil.com/support/man/docs/arm...   Oct 30 2012, 19:03
|- - XVR   Цитата(sidy @ Oct 30 2012, 22:03) По ссыл...   Oct 31 2012, 08:35
- - yurmala   Кстати, тоже столкнулся с с этой директивой. Давне...   Nov 6 2012, 05:51
- - demiurg_spb   У меня никогда не было подобных сообщений ни c одн...   Nov 6 2012, 11:12
|- - Сергей Борщ   QUOTE (demiurg_spb @ Nov 6 2012, 14:12) У...   Nov 6 2012, 11:36
|- - demiurg_spb   Цитата(Сергей Борщ @ Nov 6 2012, 15:36) П...   Nov 6 2012, 13:10
|- - ViKo   Цитата(demiurg_spb @ Nov 6 2012, 16:10) П...   Nov 6 2012, 13:19
||- - demiurg_spb   Цитата(ViKo @ Nov 6 2012, 17:19) Так при ...   Nov 7 2012, 05:06
|- - _Артём_   Цитата(demiurg_spb @ Nov 6 2012, 15:10) П...   Nov 6 2012, 13:26
- - ViKo   Прочитав (как сумел) цитаты из стандарта, показанн...   Nov 6 2012, 12:22
|- - XVR   Цитата(ViKo @ Nov 6 2012, 16:22) Прочитав...   Nov 6 2012, 12:39
|- - ViKo   Цитата(XVR @ Nov 6 2012, 15:39) Параграф ...   Nov 6 2012, 12:45
|- - XVR   Цитата(ViKo @ Nov 6 2012, 16:45) А из чег...   Nov 6 2012, 14:04
- - ReAl   Об этом тут уже говорили   Nov 6 2012, 16:14
|- - ViKo   Цитата(ReAl @ Nov 6 2012, 19:14) Об этом ...   Nov 6 2012, 18:14
- - sidy   Я нашел в Keil'e как можно выбрать gcc компиля...   Nov 29 2012, 14:50
- - Сергей Борщ   QUOTE (sidy @ Nov 29 2012, 16:50) По умол...   Nov 29 2012, 17:40


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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 04:58
Рейтинг@Mail.ru


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