Не уверен, что я здесь делаю не так. У меня есть структура, которая интенсивно используется в моей программе.
typedef struct _MyStruct {
// ... handful of non-trivial fields ...
} MyStruct;
Я ожидаю (прочитайте, намеревайтесь), чтобы многие части программы возвращали одну из этих структур, но многие из них должны иметь возможность возвращать "нулевую" структуру, которая является одиночной / глобальной. Точный вариант использования для реализации функции говорит: «Я не могу найти то, что вы просили меня вернуть».
Я предполагал, что это будет простой случай определения переменной в заголовочном файле и ее инициализации в файле .c.
// MyStruct.h
// ... Snip ...
MyStruct NotFoundStruct;
-
// MyStruct.c
NotFoundStruct.x = 0;
NotFoundStruct.y = 0;
// etc etc
Но компилятор жалуется, что инициализация не постоянна.
Поскольку меня не волнует, что этот глобальный объект на самом деле ссылается в памяти, мне важно только то, что все использует один и тот же глобал, я попытался просто удалить инициализацию и просто оставить определение в заголовке.
Но когда я сделаю это:
MyStruct thing = give_me_a_struct(some_input);
if (thing == NotFoundStruct) {
// ... do something special
}
Th компилятор жалуется, что операнды бинарного оператора "==" (или "! =") Недействительны.
Как определить такую структуру, как глобально повторно используемая (всегда один и тот же адрес памяти) структура?