У меня возникла проблема с определением моего настраиваемого объекта структуры как глобального с использованием ключевого слова extern, чтобы я мог использовать его в большем количестве исходных файлов. Я попробовал несколько вариантов, но до сих пор я не мог построить свой проект без ошибок. Это то, что я до сих пор:Использование ключевого слова extern для определения глобальной переменной по нескольким исходным файлам
main.h
#ifndef _MAIN_H_
#define _MAIN_H_
#include "pins.h"
#include "bluetooth.h"
const pin P0_21;
const pin P0_22;
const pin P0_27;
#endif
bluetooth.h
#ifndef _BLUETOOTH_H_
#define _BLUETOOTH_H_
#include "pins.h"
void EnableBT(void);
const pin BT_ENABLE;
const pin P2_0;
#endif
pins.h
#ifndef _PINS_H_
#define _PINS_H_
typedef struct
{
int port;
int pin;
int jump_phase;
int jump_counter;
} pin;
extern const pin P0_21;
extern const pin P0_22;
extern const pin P0_27;
extern const pin BT_ENABLE;
extern const pin P2_0;
extern const pin P2_2;
extern const pin P2_3;
extern const pin P2_7;
void InitPins(void);
#endif
main.c
#include "main.h"
int main()
{
InitPins();
/* Using pins from main.h */
}
bluetooth.c
#include "bluetooth.h"
void EnableBT()
{
/* Use pins in bluetooth.h */
}
pins.c
#include "pins.h"
void InitPins()
{
pin P0_21 = {0,21,0,0};
pin P0_22 = {0,22,0,0};
pin P0_27 = {0,27,0,0};
pin BT_ENABLE = {0,10,0,0};
pin P2_0 = {2,0,0,0};
pin P2_2 = {2,2,0,0};
pin P2_3 = {2,3,0,0};
pin P2_7 = {2,7,0,0};
}
Когда я удалить ссылки на ехЬегп штырей BT_ENABLe и P2_0 в bluetooth.h, компилятор говорит, что эти объекты ссылаются из bluetooth.c не определены. Но когда я их оставляю, компилятор говорит, что они размножаются по bluetooth.o и main.o.
У меня нет больше идей, как изменить свой код, чтобы заставить его работать. Спасибо за любой совет.
Всмотритесь в [Как использовать 'extern' разделить переменные между исходными файлами в C?] (Https://stackoverflow.com/questions/1433204 /) –
Вы объявляете * новые * локальные переменные в 'InitPins'. –
Локальные переменные в 'InitPins()' имеют только совпадающее отношение к именам, объявленным в заголовках. Имена в заголовках - это глобальные переменные; функции в функции доступны только функцией. Некоторый исходный файл ('.c' file) должен определять переменные вне любой функции. –