【发布时间】:2018-08-21 10:55:40
【问题描述】:
我正在编写线性列表 ADT 作为我在 DS 课上的练习。我使用一个头文件,一个函数源代码和一个驱动程序作为一个整体项目。我在头文件中定义了宏“ELEMENT_TYPE”和“MAXSIZE”。我的设计是我可以在驱动程序中#undef 并立即#define 这两个宏来将“ELEMENT_TYPE”更改为驱动程序需要的任何类型。 如果我把这些代码:
#undef ELEMENT_TYPE
#define ELEMENT_TYPE char
#undef MAXSIZE
#define MAXSIZE 50
在#define之后插入头文件,然后在驱动程序中,函数可以正确识别(例如,insertion()的第二个扩充是“ELEMENT_TYPE”,使用上面的那些代码,IDE显示插入( ) 在驱动程序中接收一个字符扩充。) 但是,如果我将这些代码放入驱动程序下面的#include "foo.h",那么 IDE 将无法识别函数应该接收什么扩充并使用 "ELEMENT_TYPE" 的初始定义,在这种情况下,诠释。谁知道我的程序出了什么问题,导致预处理指令无法正常工作?
以下是原始代码: 驱动程序.c https://paste.ubuntu.com/p/6B76vmk6nN/
linear_list.c https://paste.ubuntu.com/p/SHq4W5zkGM/
linear_list.h https://paste.ubuntu.com/p/VY8vcgFD89/
PS:我的母语不是英语,所以可能有些地方我没有表达清楚。指出它们,如果需要,我会添加更多详细信息。
【问题讨论】:
-
欢迎来到 Stack Overflow 请尽快阅读 About 和 How to Ask 页面。如果您的程序是 C,请不要使用 C++ 标签。如果是 C++,请不要使用 C 标签。使用这两种方法会惹恼人们——而被惹恼的人往往会投反对票。您需要在问题中显示您的代码;不接受粘贴箱链接(可能作为备份除外)。阅读有关创建 MCVE (minimal reproducible example) 的信息。
-
你的编译器是做什么的?它会感到困惑,还是只是您的 IDE?您使用的是哪个 IDE?在哪个平台上?现在您知道人们不一定是 IDE 的粉丝的另一个原因。您也知道 Stroustrup 想要从 C++ 中去掉预处理器的原因。
-
无法重现:wandbox.org/permlink/8LU7zVOiPLyyTTwY,但请注意警告。
标签: c header-files