gpt4 book ai didi

c - 头文件被包含两次

转载 作者:太空狗 更新时间:2023-10-29 15:50:59 25 4
gpt4 key购买 nike

我是 C 的新手(因为我不想使用 C++,或者至少现在不想),我不确定如何修复我遇到的包含错误。

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

const int Test = 1000;

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

#include "MyHeader.h"

我的项目将无法构建/编译,而且我发现它两次包含 header ,这是不允许的,因为我两次声明我的变量“测试”。经过研究,我在维基百科上找到了这个:http://bit.ly/10wPraP

我用的是这个“Include Guard”

例子:

#ifndef MY_HEADER
#define MY_HEADER
const int Test = 1000;
#endif

而且我还尝试了一次预处理器(?)命令 pragma。

#pragma once

但是,我的程序仍然无法构建。我现在收到错误消息,指出变量“Test”已在 MyFile.obj 中定义。

我认为这可能是我正在使用的 Visual Studio 主义,但我的 2010 Express C++ 和 VS2003 Professional 都不会构建它。我已尝试在 Visual Studio 中清理项目,但我不确定还能做什么。

我是不是很傻,在这里遗漏了一些明显的东西,这就是它不起作用的原因?

我习惯于使用 C# 和“使用”命名空间而不是包含。我在 VS 上设置为仅编译 C 代码会影响这个吗?

最佳答案

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

header.h:

extern const int n;

一个源文件:

#include "header.h"

const int n = 1000;

所有其他源文件:

#include "header.h"

关于c - 头文件被包含两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com