请注意:这不是家庭作业。该程序不完整且功能不完整,但至少应该可以编译。
我正在使用 C Primer Plus Book 进行自学过程(简而言之,我是 C 新手)。我几乎已经读完了整本书,并且一直在完成每一章的练习,有时我会偏离正题。这是其中之一。我遇到了一个特殊的问题,我很确定与预处理器指令有关。
我正在使用 MinGW(Windows 的 gcc),它报告:
gcc 报告的错误是:
nanfunct.c: 'keywords' 的多重定义
nanite.c: 首先在这里定义
等等...等等...更多错误...
我很确定这是由包含多个头文件引起的,但更重要的是我创建然后包含的头文件导致了这个问题。
这个问题似乎与指向字符数组(或基于字符串的数组)的指针有关,它们在编译时重复,即使我说只有在尚未预定义的情况下才定义它。
例如:
#ifndef MENU_OPTIONS
# define MENU_OPTIONS ON
# if MENU_OPTIONS == ON
...some code here...
char * keywords[] = {
"copy", "help", "line",
"quit", "read", "write"
};
char * keyletters[] = {
"c", "h", "l",
"q", "r", "w"
};
# endif
#endif
我正在使用三个文件:
nanite.c -> main()
nanfunct.c 的源文件 -> 函数
nanproto.h 的源文件 -> nanite.c 和 nanfunct.c 的头文件
在nanite.c和nanfunct.c我#include nanproto.h
pastebin 上发布的源文件:
nanproto.h -> nanite.c和nanfunct.c的头文件nanite.c和nanfunct.c -> 源文件
为什么会这样?我认为#ifndef应该防止这样的事情发生?