我遇到了一个奇怪的问题:
我有一个主要的开头:
#include <stdlib.h> /* this defines NULL */
#include <stdio.h> /* ditto */
#include <fcntl.h>
#include <ctype.h> /* ditto */
#include <unistd.h> /* ditto */
#include <linux/input.h>
#include <string.h> /* ditto */
#include <sys/ioctl.h>
#include "parse.h"
...但是在包含的文件中:
#define NULL ((void*)0) /* I need this! */
struct parse_key {
char *name;
unsigned int value;
} keynames[] = {
{"KEY_RESERVED", 0},
{"KEY_ESC", 1},
{"KEY_1", 2},
{"KEY_2", 3},
...
{"KEY_MAX", 0x2ff},
{NULL, 0}
};
我需要重新定义 NULL
,否则我会得到错误:“错误:‘NULL’ undeclared here (not in a function)”。
注意:NULL
是在主文件中定义的;如果我尝试 #define
我得到:“警告:“NULL”重新定义”
修复很简单,但我不明白发生了什么。有人可以点亮一下吗?
最佳答案
不要重新定义它。
只包括<stdlib.h>
在你的头文件中
也不要在头文件中定义任何函数和数据。仅类型声明、外部变量、函数声明和静态内联函数(如果它们在多个 C 文件中使用)。
关于c - 显然 NULL 在包含的文件中是未知的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886332/