Этот действительный стандарт c?

Я рассматриваю некоторые библиотеки оптимизации и столкнулся с функциональной подписью

double solvopt(unsigned short n,
           double x[], 
           double fun(), 
           void grad(),
           double options[],
           double func(),
           void gradc()
          )

обратите внимание, что забава () и делаемый () передается как функция. Мой вопрос состоит в том, если это - действительный стандарт C грамматика.

Спасибо.

7
задан John Knoeller 17 February 2010 в 21:18
поделиться

3 ответа

Использование double fun() вместо double (*fun)() - это архаичная форма, которая была действительна только в стандартном C и никогда в C++, и, если я правильно помню, только при объявлении аргумента функции. (подобно ary[], который законен для аргумента функции, но не для неинициализированной переменной)

Поскольку в Си невозможно передать функцию по значению другой функции, компилятор просто принял double fun() за указатель на функцию, возвращающую двойное значение.

Так что это допустимо (но архаично. вышло из употребления)

7
ответ дан 7 December 2019 в 01:20
поделиться

func () и gradc () в правильной форме для функций с неизвестными параметрами. Я почти уверен, что это был приемлемый синтаксис даже для Unix 6 примерно 1975 года.

Параметры [] такие же, как * , сейчас и в прошлом. На самом деле, я помню спор 1980-х о том, что было более уместно:

int main (int argc, char **argv, char **envp)

или

int main (int argc, char *argv[], char *envp[])

По сути, разницы нет. Спор заключается в том, что по семантике правильнее.

2
ответ дан 7 December 2019 в 01:20
поделиться

Параметры вашего массива (x и параметры), вероятно, должны быть указателями.

Ссылка на функцию в круглых скобках, например «func ()» или «gradc ()», вызывает функцию. Само имя функции - это указатель кода, который можно разыменовать для вызова рассматриваемой функции.

Если есть сомнения, попробуйте скомпилировать это с помощью компилятора ANSI C - многие компиляторы предоставляют переключатель совместимости ANSI для обеспечения соответствия стандартам. Кроме того, книга K&R - ваш друг.

Это вопрос домашнего задания?

1
ответ дан 7 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: