Вызов функций через массивы в C? - PullRequest
4 голосов
/ 05 февраля 2012

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

int executePuzzle(int input) {
    switch (input) {
        case 1: puzzle1();break;
        case 2: puzzle2();break;
        default:break;
    }
}

Однако может быть эффективнее просто иметь что-то вроде:

int puzzle[2] = {puzzle1(),puzzle2()};

Тогда вызовите пазл0;Мне было интересно, как это будет сделано.

Ответы [ 3 ]

9 голосов
/ 05 февраля 2012

Звучит как место, где полезны указатели на функции

typedef void (*puzzlePointer)();
puzzlePointer puzzles[] = { puzzle1, puzzle2, puzzle3 };

void executePuzzle(int input) {
  if (input >= 0 && input < 2) {
    puzzles[input]();
  }
}
0 голосов
/ 05 февраля 2012

Когда случаи оператора switch являются смежными, как в вашей функции executePuzzle, вполне вероятно, что компилятор внутренне использует указатели функций (через таблицу переходов) для реализации оператора switch.

0 голосов
/ 05 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...