Определение функции в функции допустимо? - C (СИ)
Формулировка задачи:
из документации gcc
Но работаю я в MSVS 2012.
И там такое не прокатывает... такие приколы могу быть только в GNU С или как-то надо VS2012 настраивать для этого???
foo (double a, double b)
{
double square (double z) { return z * z; }
return square (a) + square (b);
}Решение задачи: «Определение функции в функции допустимо?»
textual
Листинг программы
void swap(int *element1p, int *element2p);
void bubble(int work[], const int size, int (*pFunction)(int a, int b))
{ int pass, count;
for (pass = 1; pass < size; pass++)
for (count = 0; count < size - 1; count++)
if ((*pFunction)(work[count], work[count + 1])) swap(&work[count], &work[count + 1]);
}
Объяснение кода листинга программы
- В коде определена функция
swap, которая меняет местами два указателя на int. - В коде определена функция
bubble, которая сортирует массив методом пузырька. - В функции
bubbleиспользуется две вложенные циклы. - Внешний цикл выполняется
size - 1раз, гдеsize- размер массива. - Внутренний цикл выполняется
size - 1 - countраз, гдеcount- счетчик итерирующий по элементам массива. - Внутренний цикл проверяет, больше ли элемент по адресу
work[count]элемента по адресуwork[count + 1]. - Если это так, то вызывается функция
swapдля обмена элементов по адресамwork[count]иwork[count + 1]. - Функция
swapменяет местами элементы по адресамelement1pиelement2p. - В функции
bubbleпараметрwork- это массив, который нужно отсортировать. - Параметр
size- это размер массива. - Параметр
pFunction- это функция, которая сравнивает два int и возвращает значение типаint. - В функции
bubbleне используются переменные, поэтому нет значений переменных.