LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Для начала нужно заметить, что пример можно укоротить до
...

Ну тогда можно как-то так:

#include <stdio.h>

inline void func(void) __attribute__ ((always_inline));

inline void func(void)
{
  printf("hello\n");
}

int main(void) {
  func();
  return 0;
}

Такой код вполне компилируется.

Но попытка взять указатель на такую функцию приведет к ошибке. Т.е. если дописать:

typedef void (*myfunc)(void);

myfunc test(void)
{
    return func;
}
получим ошибку на этапе линковки: undefined reference to `func'

Тогда получается что этот inline void func(void) __attribute__ ((always_inline)); - не функция?

Исходная версия SZT, :

Для начала нужно заметить, что пример можно укоротить до
...

Ну тогда можно как-то так:

#include <stdio.h>

inline void func(void) __attribute__ ((always_inline));

inline void func(void)
{
  printf("hello\n");
}
int main(void) {
  func();
  return 0;
}

Такой код вполне компилируется.

Но попытка взять указатель на такую функцию приведет к ошибке. Т.е. если дописать:

typedef void (*myfunc)(void);

myfunc test(void)
{
    return func;
}
получим ошибку на этапе линковки: undefined reference to `func'

Тогда получается что этот inline void func(void) __attribute__ ((always_inline)); - не функция?