在2个c文件中包含头文件(包含变量定义)时没有构建错误

MOH*_*MED 0 c c++ compilation

我有一个h1.h包含以下变量声明的头文件:

h1.h

struct namespaces
{
    char *soap_env;
    char *soap_enc;
    char *xsd;
    char *xsi;
} ns;
Run Code Online (Sandbox Code Playgroud)

我包括头文件h1.h在2个C文件c1.cc2.c.

c1.c

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

c2.c

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

我希望在构建中出错,但我没有.在构建中没有错误也没有警告.

这是正常的吗?

在程序运行时,此类问题是否会导致未定义的行为?

Bla*_*iev 5

每个C源文件都由编译器单独处理,因此您不必担心两个不同的源文件包含相同的头文件.

如果您尝试在单个源文件中包含相同的头文件,则会出现问题.这就是为什么在头文件中包含保护(pragma或#ifndef ...)是C编程中广泛采用的习惯用法.