Member 14130865 Ответов: 3

Как инициализировать глобальную структуру в C


кстати, разрабатывая свой драйвер ядра, я знаю c++, но новичок в синтаксисе C

спасибо за помощь заранее

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

сначала у меня была своя структура в файле .c, но я хочу инициализировать свои vars в глобальном пространстве, а не отдавать свои vars локальным. поэтому я попытался сделать это таким образом

в моем заголовочном файле но это не сработало было написано ошибка типа я погуглил но безуспешно

struct Orginal
{
	PDRIVER_OBJECT driver_object; // NULL
	PDRIVER_UNLOAD unload;  // NULL
	PDRIVER_DISPATCH major_functions[IRP_MJ_MAXIMUM_FUNCTION + 1]; //{ NULL };
	PDEVICE_OBJECT device;  // NULL
	BOOLEAN destroy_device; // bool false
	ULONGLONG guard_icall; // 0
};

struct orginal org;


org = { .driver_object = NULL ,.unload = NULL , .device = NULL , .destroy_device = false , .guard_icall  = 0};


на этот раз, когда я попытался сделать это в локальных функциях, он работает нормально

orginal org;
org.device = NULL;
org.destroy_device = false;
org.guard_icall = 0;
//org.major_functions = NULL;
org.driver_object = NULL;
org.unload = NULL;

KarstenK

Лучше всего написать инициализатор в какой-нибудь функции запуска/ввода.

3 Ответов

Рейтинг:
2

steveb

Простой способ

структура оригинальной орг = {0};


Рейтинг:
12

OriginalGriff

now org is (incomplete type is not allowed)

C - так же, как и C++ - чувствителен к регистру, так что original это не то же самое, что Original.
Попробуй:
struct Orginal
{
	PDRIVER_OBJECT driver_object; // NULL
	PDRIVER_UNLOAD unload;  // NULL
	PDRIVER_DISPATCH major_functions[IRP_MJ_MAXIMUM_FUNCTION + 1]; //{ NULL };
	PDEVICE_OBJECT device;  // NULL
	BOOLEAN destroy_device; // bool false
	ULONGLONG guard_icall; // 0
};

struct Orginal org = { .driver_object = NULL ,.unload = NULL , .device = NULL , .destroy_device = false , .guard_icall  = 0};
Примечание: это будет работать только в C99 или более поздней версии (ANSI C) - назначенные инициализаторы не существовали в C до этого.


Member 14130865

@OriginalGriff спасибо man +REP

OriginalGriff

Всегда пожалуйста!

Рейтинг:
0

Rick York

Ваша попытка имела отдельную инструкцию, так что это был неправильный синтаксис для инициализации. Попробовать это :

struct orginal org = { NULL, NULL, NULL, NULL, false, 0 };


Member 14130865

@Рик-Йорк орг (неполного типа не допускается)

Rick York

Что произойдет, если вы напишете,

Orginal org = { NULL, NULL, NULL, NULL, false, 0 };

?