Собственно, subj. Функции View* возвращают указатель на static char *, по сути все три делают double2string преобразование, просто по-разному (некоторые округляют, некоторые добавляют k/M в конце числа). Опции сборки: -O4 -march=i486 -fomit-frame-pointer -std=c99 -lm
char *(* MYview)(double ivalue);
int main(void) {
int i, x = 3;
if (x == 1) MYView = View1;
else if (x == 2) MYView = View2;
else if (x == 3) MYView = View3;
for (i = 0; i < 1000000; i++) fprintf(stdout, "%s\n", MyView(47653423.0));
return 0;
}
Код выше тормознее, чем приведенный ниже на 20% (согласно поля real команды time: 3.300 для кода выше > 2.700 для кода ниже):
int main(void) {
int i, x = 3;
for (i = 0; i < 1000000; i++) {
if (x == 1) fprintf(stdout, "%s\n", View1(47653423.0));
else if (x == 2) fprintf(stdout, "%s\n", View2(47653423.0));
else if (x == 3) fprintf(stdout, "%s\n", View3(47653423.0));
return 0;
}
И если это нормально, тогда может кто то пояснит в каких случаях указатели на функции эффективны?
Похожие темы
- Форум Указатель на функцию (2016)
- Форум Массивы указателей K&R (2015)
- Форум Программа из K&R вопросы по warnings, полученные от gcc (2015)
- Форум [C] Изменение кода в рантайме (2011)
- Форум Проблемы с серверным приложением (2003)
- Форум помогите немогу понять куда девается stdout (2009)
- Форум Просьба проверить учебную программу на языке Си на наличие ошибок - 2 (2014)
- Форум YACC (2012)
- Форум Си: Стэк (2013)
- Форум [C] Освободить память занятую структурой. (2010)