编译引用一个头文件的两个C文件时出错"重复定义"

sup*_*bie 5 c header definition

我有两个C文件和一个标题,如下所示:

头文件header.h:

char c = 0;
Run Code Online (Sandbox Code Playgroud)

file1.c中:

#include "header.h"
Run Code Online (Sandbox Code Playgroud)

file2.c中:

#include "header.h"
Run Code Online (Sandbox Code Playgroud)

编译时我被警告"重复定义".我理解原因,因为变量c在file1.c和file2.c中定义了两次; 但是,我确实需要在两个c文件中引用header.h.我该如何克服这个问题?

Car*_*rum 14

首先,不要在标题中定义变量.extern在头文件中声明变量时使用限定符,并在C文件中的一个(不是两个)或在自己的新文件中定义它(如果您愿意).

标题:

extern char c;
Run Code Online (Sandbox Code Playgroud)

执行:

#include <header.h>
char c = 0;
Run Code Online (Sandbox Code Playgroud)

或者,您可以将标题留在标题中但添加static.使用static将导致不同于extern上面示例中使用的程序行为- 所以要小心.如果你这样做static,包含标题的每个文件都将获得自己的副本c.如果您使用extern,他们将共享一份副本.

第二,使用防范双重包含:

#ifndef HEADER_H
#define HEADER_H

... header file contents ...

#endif
Run Code Online (Sandbox Code Playgroud)