Include Guard Problem in C (Compiler still reports redefiniton errors)
Include Guard Problem in C (Compiler still reports redefiniton errors)
正如标题所说,我在使用 include guards 时遇到问题。我不确定我是否正确使用了它们,所以我已经检查了几个相关的帖子,它们都包含似乎与我相同的代码。请告诉我我使用 include guards 有什么问题。
对于上下文,我有几个 header 文件,我希望能够在其他程序中使用这些文件,因为这多个文件包含相同的依赖项 header (一个 linkedList 文件),这是出现问题的地方。即使我似乎包含了保护,编译器仍然报告代码有重定义错误。下面是不起作用的包含防护。
#ifndef UNI_LINKED_LIST_LIB_H
#define UNI_LINKED_LIST_LIB_H "uniLinkedListLibV02.h"
#include UNI_LINKED_LIST_LIB_H
#endif
我的理解是,如果我尝试多次包含此 header,#ifndef 将 return 为假。在第一个包含它应该定义 UNI_LINKED_LIST_H 然后包含库。
这就是您所需要的:
#ifndef UNI_LINKED_LIST_LIB_H
#define UNI_LINKED_LIST_LIB_H
#include "uniLinkedListLibV02.h"
rest of code goes here
#endif
您只需要定义UNI_LINKED_LIST_LIB_H,值无关紧要。
这是一个带有守卫的 .h
文件:
// guard.h -- include file with a guard
#ifndef GUARD_H
#define GUARD_H
#define SPECIAL_VALUE 23
#endif
这是一个使用它的 .c
文件:
// main.c -- program that includes the guarded file
#include <stdio.h>
#include "guard.h"
int
main(void)
{
printf("%d\n",SPECIAL_VALUE);
return 0;
}
这是一个 .c
文件,其中 错误地:
// bad.c -- program that includes the guarded file _incorrectly_
#include <stdio.h>
// do _not_ do this:
#ifndef GUARD_H
#define GUARD_H
#include "guard.h"
#endif
int
main(void)
{
printf("%d\n",SPECIAL_VALUE);
return 0;
}
正如标题所说,我在使用 include guards 时遇到问题。我不确定我是否正确使用了它们,所以我已经检查了几个相关的帖子,它们都包含似乎与我相同的代码。请告诉我我使用 include guards 有什么问题。
对于上下文,我有几个 header 文件,我希望能够在其他程序中使用这些文件,因为这多个文件包含相同的依赖项 header (一个 linkedList 文件),这是出现问题的地方。即使我似乎包含了保护,编译器仍然报告代码有重定义错误。下面是不起作用的包含防护。
#ifndef UNI_LINKED_LIST_LIB_H
#define UNI_LINKED_LIST_LIB_H "uniLinkedListLibV02.h"
#include UNI_LINKED_LIST_LIB_H
#endif
我的理解是,如果我尝试多次包含此 header,#ifndef 将 return 为假。在第一个包含它应该定义 UNI_LINKED_LIST_H 然后包含库。
这就是您所需要的:
#ifndef UNI_LINKED_LIST_LIB_H
#define UNI_LINKED_LIST_LIB_H
#include "uniLinkedListLibV02.h"
rest of code goes here
#endif
您只需要定义UNI_LINKED_LIST_LIB_H,值无关紧要。
这是一个带有守卫的 .h
文件:
// guard.h -- include file with a guard
#ifndef GUARD_H
#define GUARD_H
#define SPECIAL_VALUE 23
#endif
这是一个使用它的 .c
文件:
// main.c -- program that includes the guarded file
#include <stdio.h>
#include "guard.h"
int
main(void)
{
printf("%d\n",SPECIAL_VALUE);
return 0;
}
这是一个 .c
文件,其中 错误地:
// bad.c -- program that includes the guarded file _incorrectly_
#include <stdio.h>
// do _not_ do this:
#ifndef GUARD_H
#define GUARD_H
#include "guard.h"
#endif
int
main(void)
{
printf("%d\n",SPECIAL_VALUE);
return 0;
}