LINUX.ORG.RU

Покритикуйте подход: запуск функций из массива указателей

 


0

2

Периодически сталкиваюсь с ситуациями, когда нужно вызвать некоторое количество функций, которые имеют одинаковый прототип и результат выполнения которых нужно контролировать. Чтоб не прописывать проверку после вызова каждой функции, решил сделать всё в цикле.

int sx1509_init( struct BicOS* os ){
	
	int res;
	int i;
	
	const struct {
		int (*function)( struct BicOS* );
		const char* name;
	} initSequence[] = {
		{ gpioSetup,                  "GPIO setup"                    },
		{ deviceSetup,                "Device setup"                  },
		{ interruptHandlerSetup,      "Interrupt handler setup"       },
		{ interruptEventHandlerSetup, "Interrupt event handler setup" },
		{ keyboardSetup,              "Keyboard setup"                },
		{ debug_key_printer_register, "Deug key printer"              },
		{ NULL,                       NULL                            }
	};
	
	for( i = 0; initSequence[i].function; i++ ){
		
		res = initSequence[i].function( os );
		if( res ){
			printf( "{B} [sx1509] %s failed.\n", initSequence[i].name );
			return -1;
		}
	}
	
	return 0;
}

На первый взгляд оверхед у такого небольшой. Может у меня глаз замылился и я в упор не вижу подвоха? Какие у вас будут мнения на этот счёт?

★★

Последнее исправление: u5er (всего исправлений: 1)