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;
}