Я пишу модуль ядра Linux, который использует экспортированный символ open_exec
struct file *open_exec(const char *name)
Возвращает указатель, и я могу проверить ошибку с помощью макроса IS_ERR
:
if (IS_ERR(file))
return file;
Во время компиляции я получаю это предупреждение:
warning: return makes integer from pointer without a cast
Это потому, что моя функция возвращает целое число. Если я попытаюсь разыграть это:
return (int) file;
Я не получаю предупреждение на моей 32-битной машине, но я получаю на моей 64-битной машине:
warning: cast from pointer to integer of different size
Это потому, что sizeof
для int и указателя одинаковы на 32-битной, но они отличаются на 64-битной машине.
Как ни крути, код работает. Я просто хотел бы избавиться от предупреждения.
Как мне правильно привести указатель к целому числу и получить ожидаемое значение, не получая при этом предупреждения компилятора? Ожидаемое мной значение - это целое число, указанное в include/asm-generic/errno-base.h
базы кода ядра Linux.
Так как я смотрю только на указатель, как если бы он был целым числом в случае, если IS_ERR()
истинно, я могу быть уверен, что на самом деле он содержит только целочисленное значение.