LINUX.ORG.RU
Ответ на: комментарий от ilammy

Если под камнем подразумевать говнокод, то да, можно.

nanoolinux ★★★★
()
Ответ на: комментарий от ilammy

Запросто:

int makeRock() {
    return -1;
}

bool canLift(int rock) {
    return rock > 0 && rock < 2048;
}

void liftAnyway(int rock) {
    printf("lifted %d\n", rock);
}

int main() {
    int rock = makeRock();
    printf("can't lift: %s\n", !canLift(rock) ? "yes" : "no");
    liftAnyway(rock);
}
anonymous
()
Ответ на: комментарий от nanoolinux

devide_by_zero

1. divide
2. Где здесь деление на 0?

return 42/i;


Хардкод, фу!

  } else {
    exit(-1);

Это не деление на ноль!

Предлагаю такой вариант

#include <limits.h>
#define INFINITY INT_MAX
 
int divide(int numerator, int denominator) {
    int sign, result;
 
    if (denominator) {
    	result = numerator / denominator;
    } else {
        sign = (numerator > 0) - (numerator < 0);
        result = sign * INFINITY;
    }
 
    return result;
}
KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

Хардкод, фу!

Но ведь всё равно хардкод! Предлагаю такой вариант:

int divide(int numerator, int denominator, int (*handle_div_by_zero)(int, int))
{
    if (denominator != 0)
        return (numerator / denominator);
    else
        return handle_div_by_zero(numerator, denominator);
}

ilammy ★★★
()
Ответ на: комментарий от KennyMinigun
int default_div_by_zero_handler(int n, int d)
{
    // do stuff
}

inline
int Divide(int numerator, int denominator)
{
    return divide(numerator, denominator, default_div_by_zero_handler);
}
ilammy ★★★
()
Ответ на: комментарий от anonymous

Слишком очевидно, а потому уныло.

Но только никто этого не предложил )

lispfuerimmer
()
Ответ на: комментарий от KennyMinigun

В сишечке нет (и не надо) значений аргументов по умолчанию же.

ilammy ★★★
()

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

res2500
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.