As for declaring variables in .h files being standard practice, let's look at EEPROM.h/.cpp:
#ifndef EEPROM_h
#define EEPROM_h
#include <inttypes.h>
class EEPROMClass
{
public:
uint8_t read(int);
void write(int, uint8_t);
};
extern EEPROMClass EEPROM; // <<< reference to a variable declared elsewhere
#endif
#include <avr/eeprom.h>
#include "Arduino.h"
#include "EEPROM.h"
uint8_t EEPROMClass::read(int address)
{
return eeprom_read_byte((unsigned char *) address);
}
void EEPROMClass::write(int address, uint8_t value)
{
eeprom_write_byte((unsigned char *) address, value);
}
EEPROMClass EEPROM; // <<< variable declaration is in .cpp file