@Levhav
Возьмусь за разработку проектов любой сложности.

Будет ли рассчитано значение выражения strlen("str") на этапе компиляции или при выполнении?

Будет ли после компиляции код
int len = strlen("str");
int a = len + 1;
int b = len + 2;


эквивалентен коду
int a =  strlen("str") + 1;
int b =  strlen("str") + 2;
  • Вопрос задан
  • 421 просмотр
Решения вопроса 1
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Вообще нет. Но, если компилятор сочтет что ваша строка не меняется (а это так и есть), он может оптимизировать этот код, заменив его константой. К стати, он еще и len тогда может выкинуть, заменив его константой в выражениях ниже.

Сказать что он наверняка заменит можно только точно зная какой компилятор используется и опции компиляции.

gcc с -O3 100% выкинет эту строку и заменит константой выражения для a и b, а вот с -O0 скорее всего трогать не станет.

Чтобы наверняка быть уверенным, что компилятор ничего не оптимизирует можно применить volatile, но в большинстве случаев для этого нет причин.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Вряд ли.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы