goto 문으로 코드가 깔끔해집니다.
------------------------------------------
int my_init(void)
{
char *m1;
char *m2;
char *m3;
char *m4;
int mhandle;
int ret = 0;
m1 = alloc(size);
if (!m1) {
printf("M1 memory alloc failed\n")
ret = -1;
goto err_m1;
}
m2 = alloc(size);
if (!m2) {
printf("M2 memory alloc failed\n")
ret = -2;
goto err_m2;
}
m3 = alloc(size);
if (!m3) {
printf("M3 memory alloc failed\n")
ret = -3;
goto err_m3;
}
m4 = alloc(size);
if (!m4) {
printf("M4 memory alloc failed\n")
ret = -4;
goto err_m4;
}
mhandle = register_func();
if (!mhandle) {
printf("failed to get handle\n")
ret = -5;
goto err_handle;
}
return 0;
err_handle:
free(m4);
err_m4:
free(m3);
err_m3:
free(m2);
err_m2:
free(m1);
err_m1:
return ret;
}
------------------------------------------
중간에 실패 한다고 생각하면
goto 문 없이 어떻게 깔끔하게 짤 수 있을까요?
init 함수 쪽에서 goto 문을 자주 사용합니다.