История изменений
Исправление
drBatty,
(текущая версия)
:
Если эти функции больше ни откуда не вызываются, то не логично.
логично. Хотя-бы потому, что ты инкапсулируешь внутрь функций своё i, и у тебя не будет с ним проблем. Кроме проблемы повторного присваивания, существуют ещё как минимум одна проблема: внутри цикла ты не сможешь заюзать ещё раз своё i. Однако, внутри функции ты можешь юзать i, несмотря на то, что внутри вложенной функции юзается другое i.
Я так делаю только тогда, когда код будет использоваться лишь единожды. Иногда делаю inline-функции, но их все равно надо будет определять внутри той функции, откуда они будут вызываться, чтобы не делать 100500 глобальных переменных или 100500 аргументов каждой функции.
не нужно их определять как inline или использовать глобальные переменные.
Думаешь, компилятор настолько тупой, что сам не может развернуть?
А хрен его знает, вдруг он не понавтыкает кучу функций в тело той, откуда они вызываются, а будет мухлевать с jmp и регистрами?
а зачем ему это надо? Если ты заметишь такое поведение - смело пиши багрепорт, ибо это какой-то баг. (это не относится к тому случаю, когда у компилятора не хватило регистров, и он был вынужден использовать память. В достаточно новых процессорах (моложе 20 лет) имеется очередь отложенной записи, благодаря которой запись и чтение в стек не требуют оперативной памяти. Потому компилятор может использовать стек как временную память, напрямую распарсив вызов подпрограммы. Это получается всё равно быстрее, чем использование какой-то статической переменной)
Исходная версия
drBatty,
:
Если эти функции больше ни откуда не вызываются, то не логично.
логично. Хотя-бы потому, что ты инкапсулируешь внутрь функций своё i, и у тебя не будет с ним проблем. Кроме проблемы повторного присваивания, существуют ещё как минимум одна проблема: внутри цикла ты не сможешь заюзать ещё раз своё i. Однако, внутри функции ты можешь юзать i, несмотря на то, что внутри вложенной функции юзается другое i.
Я так делаю только тогда, когда код будет использоваться лишь единожды. Иногда делаю inline-функции, но их все равно надо будет определять внутри той функции, откуда они будут вызываться, чтобы не делать 100500 глобальных переменных или 100500 аргументов каждой функции.
не нужно их определять как inline или использовать глобальные переменные.
Думаешь, компилятор настолько тупой, что сам не может развернуть?
А хрен его знает, вдруг он не понавтыкает кучу функций в тело той, откуда они вызываются, а будет мухлевать с jmp и регистрами? а зачем ему это надо? Если ты заметишь такое поведение - смело пиши багрепорт, ибо это какой-то баг. (это не относится к тому случаю, когда у компилятора не хватило регистров, и он был вынужден использовать память. В достаточно новых процессорах (моложе 20 лет) имеется очередь отложенной записи, благодаря которой запись и чтение в стек не требуют оперативной памяти. Потому компилятор может использовать стек как временную память, напрямую распарсив вызов подпрограммы. Это получается всё равно быстрее, чем использование какой-то статической переменной)