Добавление <errno.h> к "my_header.h" приводит к сообщению об ошибке
Я пытаюсь напечатать "номер ошибки" из 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 ответ
Это потому, что вы назвали свой параметр errno
который расширяется препроцессором, благодаря этому
#define errno (*__error())
(Errno.h)
Итак, этот прототип
int print_errno(int errno);
расширяется до
int print_errno(int (*__error()));
Краткое исправление, не вызывайте ваш параметр errno