|
Как сослаться на структуру typedef struct?, Из другого файла |
|
|
|
Jun 20 2017, 09:27
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
В одном хидере объявлена структура: Код typedef struct ADC_my2 { //Структура для хранения сырых значений uint16_t ADC_CH0; // uint16_t ADC_CH1; // uint16_t ADC_CH2; // uint16_t ADC_CH3; // uint16_t ADC_CH4; // uint16_t ADC_CH5; // uint16_t ADC_CH6; // uint16_t ADC_CH7; // }ADC_my; // ADC_my ADC_RAW; // Для того, чтобы были доступны ее элементы из другого файла нажно в его хидере объявить эту структуру как extern. Если я правильно понимаю. Как это сделать?
|
|
|
|
|
 |
Ответов
|
Jun 20 2017, 09:37
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Не получается однако. Я так уже пробовал. Потому и спросил. Код ../Src/stm32l1xx_it.c(91): error: #20: identifier "ADC_my" is undefined
|
|
|
|
|
Jun 20 2017, 09:40
|
Знающий
   
Группа: Участник
Сообщений: 518
Регистрация: 29-09-11
Пользователь №: 67 450

|
Цитата(Димон Безпарольный @ Jun 20 2017, 13:37)  Не получается однако. Я так уже пробовал. Потому и спросил. Код ../Src/stm32l1xx_it.c(91): error: #20: identifier "ADC_my" is undefined что-то Вы умалчиваете. В хедере должно быть объявление типа структуры и extern объявление переменной. Этот хедер должен подключаться во все файлы, где используется эта структура. В одном из файлов должна быть размещена эта струкутра, т.е. объявление переменной без extern, хедер этому мешать не будет.
|
|
|
|
|
Jun 20 2017, 09:52
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(novikovfb @ Jun 20 2017, 12:40)  что-то Вы умалчиваете. В хедере должно быть объявление типа структуры и extern объявление переменной. Этот хедер должен подключаться во все файлы, где используется эта структура. В одном из файлов должна быть размещена эта струкутра, т.е. объявление переменной без extern, хедер этому мешать не будет. Возможно умалчиваю потому, что не понимаю механизма. В каком хедере должно быть объявление типа структуры? У меня в одном хедере размещена структура, в другом - я на нее сослался с помощью extern. Но получил ошибку (выше). Что я сделал неправильно?
|
|
|
|
|
Jun 20 2017, 10:01
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(novikovfb @ Jun 20 2017, 12:59)  Ничего волшебного. Хедеры используются исключительно для удобства и уменьшения вероятности ошибки при переписывании. Компилятор последовательно просматривает текст программы, подключает все хедеры в том порядке, в котором они упомянуты в #include. Видит объявление типа структуры - запоминает, что это такое. Когда видит extern ADC_my ADC_RAW - запоминает, что где-то есть такая структура уже известного типа ADC_RAW. Когда видит ADC_my ADC_RAW - проверяет, не противоречит ли это ранее увиденной extern ADC_my ADC_RAW и отводит место в памяти для этой структуры. Спасибо. Почему тогда ругается на extern ADC_my ADC_RAW; ? Цитата ../Src/stm32l1xx_it.c(91): error: #20: identifier "ADC_my" is undefined
Сообщение отредактировал Димон Безпарольный - Jun 20 2017, 10:06
|
|
|
|
Сообщений в этой теме
Димон Безпарольный Как сослаться на структуру typedef struct? Jun 20 2017, 09:27 Genadi Zawidowski В хидеое должно быть так:
extern ADC_my ADC_RAW;
... Jun 20 2017, 09:29 scifi Цитата(Genadi Zawidowski @ Jun 20 2017, 12... Jun 20 2017, 09:33      Димон Безпарольный Цитата(Сергей Борщ @ Jun 20 2017, 13:06) ... Jun 20 2017, 10:08       novikovfb Цитата(Димон Безпарольный @ Jun 20 2017, 14... Jun 20 2017, 10:15        Димон Безпарольный Цитата(novikovfb @ Jun 20 2017, 13:15) Об... Jun 20 2017, 10:27 Mareng Цитата(Димон Безпарольный @ Jun 20 2017, 16... Jun 20 2017, 09:41  novikovfb Цитата(Mareng @ Jun 20 2017, 13:41) Возмо... Jun 20 2017, 09:43 Непомнящий Евгений Код// a.h
typedef struct A {int f; } AA;
extern AA... Jun 20 2017, 10:34 Lagman В .h (для примера main.h) файле обычно находится о... Jun 20 2017, 11:16 novikovfb Цитата(Lagman @ Jun 20 2017, 15:16) В дру... Jun 20 2017, 11:27  Lagman Цитата(novikovfb @ Jun 20 2017, 14:27) ex... Jun 20 2017, 11:30   novikovfb Цитата(Lagman @ Jun 20 2017, 15:30) Можно... Jun 20 2017, 12:00 Димон Безпарольный Да, спасибо. Так все заработало.
В хидере:
Кодty... Jun 20 2017, 11:32 Lagman Цитата(Димон Безпарольный @ Jun 20 2017, 14... Jun 20 2017, 11:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|