История изменений
Исправление shkolnick-kun, (текущая версия) :
Помоему, конструкция вида:
char* read_kode(const char *arg){
FILE * f;
f = fopen(arg, "r");
if (NULL != f){
if (fseek(f, 0, SEEK_END)){
ssize_t fsz;
fsz = ftell(f);
rewind(f);
ret = malloc(fsz+1);
if (NULL != ret){
char * ret;
ssize_t rsz;
rsz = fread(f, ret, fsz);
if (0 == fsz - rsz){
fclose(f);
ret[fsz] = 0;
return ret;
}else{
free(ret);
}
}
}
fclose(f);
}
return NULL;
}
if () {
if () {
do {
if () {
if () {
if () {
...
}
}
...
}
...
}
while ();
...
}
else {
...
}
}
И это не пример, а описание распространенного приема рефакторинга, когда:
У вас есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода.
Если ОП/ТС будет увлекаться вложенностью, то рано или поздно он таки создаст вышеописанную проблему.
Так что пусть привыкает к goto error_xxx; или переходит на C++ с исключениями.
Исходная версия shkolnick-kun, :
Помоему,конструкция вида:
char* read_kode(const char *arg){
FILE * f;
f = fopen(arg, "r");
if (NULL != f){
if (fseek(f, 0, SEEK_END)){
ssize_t fsz;
fsz = ftell(f);
rewind(f);
ret = malloc(fsz+1);
if (NULL != ret){
char * ret;
ssize_t rsz;
rsz = fread(f, ret, fsz);
if (0 == fsz - rsz){
fclose(f);
ret[fsz] = 0;
return ret;
}else{
free(ret);
}
}
}
fclose(f);
}
return NULL;
}
if () {
if () {
do {
if () {
if () {
if () {
...
}
}
...
}
...
}
while ();
...
}
else {
...
}
}
И это не пример, а описание распространенного приема рефакторинга, когда:
У вас есть группа вложенных условных операторов, среди которых сложно выделить нормальный ход выполнения кода.
Если ОП/ТС будет увлекаться вложенностью, то рано или поздно он таки создаст вышеописанную проблему.
Так что пусть привыкает к goto error_xxx; или переходит на C++ с исключениями.