構造化プログラミング
無駄に長い.うにゅー
int srv_start() { int rv = 0; SC_HANDLE hSCM; /* stop service */ srv_stop(); /* start service */ hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (hSCM) { SC_HANDLE hService; hService = OpenService(hSCM, SERVICE_NAME, SERVICE_START); if (hService) { if (StartService(hService, 0, NULL)) { rv = 0; } else { rv = -1; } CloseServiceHandle(hService); } else { rv = -1; } CloseServiceHandle(hSCM); } else { rv = -1; } return rv; }
論理の流れとリソースの管理が一致してないからこんなソースになるのであって.
でも,こんなのはもっと微妙なのであって.
int srv_start() { int rv = 0; SC_HANDLE hSCM; SC_HANDLE hService; /* stop service */ srv_stop(); /* start service */ hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE); if (!hSCM) { rv = -1; goto _srv_start_cleanup_hSCM; } hService = OpenService(hSCM, SERVICE_NAME, SERVICE_START); if (!hService) { rv = -1; goto _srv_start_cleanup_hService; } rv = (StartService(hService, 0, NULL)) ? 0 : -1; _srv_start_cleanup_hService: CloseServiceHandle(hService); _srv_start_cleanup_hSCM: CloseServiceHandle(hSCM); return rv; }
あなたは,どちらがお好みですか?