z3ngew Ответов: 2

Как объявить статическую переменную в файле .h и определить ее в файле .c ?


Всем привет,
Я создаю библиотеку кода на языке Си для управления клавиатурой с помощью микроконтроллера atmega,
для этого я создал 2 файла keypad.h и keypad.c

Я использую компилятор GCC C

когда я пытаюсь объявить статическую переменную в файле .h, а затем определить ее в файле .c, как показано ниже;
.H-файл
static char passkey[];		
static char passkey_mask[];
static int passkey_cursor;


.файл c
static char passkey[PW_LENGTH];
static char passkey_mask[PW_LENGTH];
static int passkey_cursor = 0;


компилятор понимает, что существует 2 переменные passkey_cursor с одинаковым именем, и предупреждает меня, что одна из них в файле .h определена, но никогда не используется

но для массивов
passkey
и
passkey_mask
- все работает нормально.

Пожалуйста мне нужна ваша поддержка,
Заранее спасибо,
z3ngew

Что я уже пробовал:

если я удалю эту строку из заголовочного файла

static int passkey_cursor;


все в порядке, однако переменная не объявлена в заголовочном файле, как я намереваюсь сделать

2 Ответов

Рейтинг:
9

Richard MacCutchan

Вы не должны определять их в заголовочном файле, если они статичны, только в файле .cpp. Если вы пытаетесь создать глобальные переменные, то вы должны объявить их extern в заголовке, и дать им значение в один только файл .cpp, например:

// header.h
extern int variable;
extern int varArray[];

// main.cpp
#include "header.h"
int variable = 0;
int vararry[22];

// sub.cpp
#include "header.h"

void sub()
{
    variable = 55;
    vararry[0] = 10;
}


Рейтинг:
20

CPallini

Вы должны объявить свою переменную extern в заголовке и определите его в исходном файле (без static клапанам: static в исходном файле предусмотрена внутренняя связь). Смотрите, например: Внутренняя связь со статическим ключевым словом в C - Stack Overflow[^].