我面临一个奇怪的问题:

我的主要开始是:

#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(不在函数中)”。

注意:NULL在主文件中定义;如果我尝试#define它得到:“警告:” NULL“重新定义”

修复很简单,但是我不知道发生了什么。有人可以照亮吗?

最佳答案

不要重新定义它。

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

也不要在头文件中定义任何功能和数据。如果在许多C文件中使用了类型声明,外部变量,函数声明和静态内联函数,则只需声明它们即可。

关于c - 显然在包含的文件中未知NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53886332/

10-13 07:32
查看更多