头文件被包含两次

Ewa*_*wan 3 c compiler-errors header-files visual-studio

我对C比较陌生(因为我不想使用C++,或者至少还没有),我不知道如何修复我的包含错误.

我有一个包含常量值1000的头文件,称为Test.

const int Test = 1000;
Run Code Online (Sandbox Code Playgroud)

我有这个文件包含在2个文件中 - Myfile.c和Myfile2.c,每个文件都包含这样的文件:

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

我的项目不会构建/编译,因为我发现它包括两次不允许的标题,因为我声明我的变量"Test"两次.经过研究,我在维基百科上找到了这个:http://bit.ly/10wPraP

我用这个"Include Guard"

例:

#ifndef MY_HEADER
#define MY_HEADER
 const int Test = 1000;
#endif
Run Code Online (Sandbox Code Playgroud)

我也曾尝试过预处理器(?)命令pragma.

#pragma once
Run Code Online (Sandbox Code Playgroud)

但是,我的程序仍然无法构建.我现在得到错误,说已经在MyFile.obj中定义了变量"Test".

我认为这可能是一个Visual Studio-ism,因为我正在使用它,但我的2010 Express C++和VS2003 Professional都不会构建它.我试过在Visual Studio中清理项目,我不知道还能做什么.

我是非常愚蠢而且在这里遗漏了一些明显的东西,这就是为什么它不起作用?

我习惯于C#和"使用"命名空间而不是包含.可能我在VS上设置只编译C代码会影响这个吗?

Ker*_* SB 8

包括警卫与它无关.您需要将声明与定义分开,并且只有一个定义(这称为"一个定义规则",ODR):

header.h:

extern const int n;
Run Code Online (Sandbox Code Playgroud)

一个源文件:

#include "header.h"

const int n = 1000;
Run Code Online (Sandbox Code Playgroud)

所有其他源文件:

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