Как стандарт описывает вызов функции по указателю?

Всем привет.


Возник вопрос по поводу вызова функции по указателю. Есть такой вот код:
#include "stdio.h"

typedef void (*FUNC)();

void func()
{
    printf( "In func()\n" );
}

int main( int argc, char* argv[] )
{
    FUNC f = func;
    (*f)();
    f();
    return 0;
}


VS2010 код компилирует, под Windows вывод программы следующий:
In func()
In func()


Керниган, Ритчи пишут, что по стандарту вызов функции по указателю надо делать, как в первом варианте.

Собственно вопрос: без разыменовывания указателя (как во втором варианте) вызывать можно? Что на счет этого говорит последний стандарт С? GCC правильно скомпилирует код?
  • Вопрос задан
  • 5172 просмотра
Решения вопроса 1
Ramires
@Ramires
GCC правильно скомпилирует код?

Результат GCC и Clang совпал с VS2010.

user@user-desktop:~$ gcc test.c
user@user-desktop:~$ ./a.out
In func()
In func()

user@user-desktop:~$ clang test.c
user@user-desktop:~$ ./a.out
In func()
In func()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Можно. Как видите, имя функции является указателем на неё.
Ответ написан
Ваш ответ на вопрос

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

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