добавлятьк "my_header.h" приводит к сообщению об ошибке - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь напечатать 'номер ошибки' из errno.h в my_func. Если я включу <errno.h> в my_func.c напрямую, все в порядке. Но если я включу <errno.h> в "my_header.h", а затем включу "my_header.h" в my_func.c, компилятор выдает ошибку:

src/my_func.c: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'int (*(*)())' [-Wint-conversion] return (print_errno(errno));


/usr/include/sys/errno.h:81:15: note: expanded from macro 'errno' #define errno (*__error())

my_func.c:

#include "my_header.h"

int my_func(void)
{
  if (write(5, "Hello, world!", 13) == -1)
     return(print_errno(errno));
}

my_header.h:

#include <errno.h>

int print_errno(int errno);

print_errno.c:

#include "my_header.h"
#include <stdio.h>

int print_errno(int errno)
{
  printf("error number = %d", errno);
  return (-1);

}

Почему у меня эта ошибка?

1 Ответ

0 голосов
/ 21 января 2019

Это потому, что вы назвали свой параметр errno, который расширяется препроцессором, из-за этого

 #define errno (*__error())

(errno.h)

Итак, этот прототип

int print_errno(int errno);

расширяется до

int print_errno(int (*__error()));

Краткое исправление, не вызывайте ваш параметр errno

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