首页 > 解决方案 > 显然 NULL 在包含的文件中是未知的

问题描述

我面临一个奇怪的问题:

我有一个主要的开头:

#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”重新定义”

修复是微不足道的,但我不明白发生了什么。有人可以发光吗?

标签: cgccc-preprocessor

解决方案


不要重新定义它。

只需包含<stdlib.h>在您的头文件中

也不要在头文件中定义任何函数和数据。只是类型声明、外部变量、函数声明和静态内联函数(如果它们在许多 C 文件中使用)。


推荐阅读