LINUX.ORG.RU

Передача вычислений в функцию

 


0

2

В языке программирования C интересует влияние помещения вычислительных операторов в функцию. Уже как-то было сказано, что порядок вычислений не документирован стандартом, а также есть различия в каждом отдельно взятом компиляторе.

Вопрос: а если выражению пофиг какой порядок вычисления? Допустим:

printf («Sum ravna %d\n», digit1*digit2);

Можно так делать? Влияет ли на скорость выполнения? Или лучше отдельно будет писать, без передачи в функцию?



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

Если параметры независимы, а «Sum ravna %d\n» и digit1*digit2 являются таковыми, то разницы нет.
Пример зависимых параметров g () и a, где g () меняет a, к примеру g () { a *= a; }. Здесь, очевидно, результат выполнения f (g (), a) неопределён.

backbone ★★★★★
()

Никакие вычисления никуда не передаются. Сначала вычисляются все аргументы функции, потом их значения передаются в функцию.

Не хотел бы я иметь дело с языком, который оборачивает аргументы в замыкания и передает их в функцию :D

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

Не хотел бы я иметь дело с языком

С хаскелем-то?

anonymous
()

Так будет правильней

printf ("Sum is %d\n", digit1*digit2);

Нет в английском языке слова «ravna».

В данном случае порядок вычисления аргументов функции не важен, т.к. эти вычисления не имеют побочных эффектов.

theNamelessOne ★★★★★
()
Ответ на: Так будет правильней от theNamelessOne
printf ("Sum is %d\n", digit1*digit2);

Нет в английском языке слова «ravna».

Насколько мне известно, сума это не результат _умножение_ аргументов.

По сабжу: в функцию передается уже результат операции. Пример: напиши и продебажь:

int f(int _a)
{
//...Посмотри сколько _a будет.\
}

int main(..)
{
 f(2+2);
..
}

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

Насколько мне известно, сума это не результат _умножение_ аргументов.

это пусть останется на совести топикстартера. Я всего лишь высказался против транслита.

По сабжу: в функцию передается уже результат операции

если ты мне — то я это и так прекрасно знаю

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

напиши и продебажь

Зачем учить людей плохому? Бывают тысячи ситуаций, когда отладчиком воспользоваться не удается. Гораздо более полезный совет — «напиши и распечатай _a»:

int f(int _a){
    printf("%d\n", _a);
    //...
}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.