gpt4 book ai didi

c - 是否允许不同的翻译单元定义具有相同名称的结构?

转载 作者:太空狗 更新时间:2023-10-29 16:55:19 25 4
gpt4 key购买 nike

假设我有 a.cb.c,它们都定义了名为 struct foo 的类型,但定义不同:

#include <stdio.h>

struct foo {
int a;
};

int a_func(void) {
struct foo f;
f.a = 4;
printf("%d\n", f.a);
return f.a * 3;
}

#include <stdio.h>

struct foo { // same name, different members
char *p1;
char *p2;
};

void b_func(void) {
struct foo f;
f.p1 = "hello";
f.p2 = "world";
printf("%s %s\n", f.p1, f.p2);
}

在 C 中,这些文件是否可以作为符合标准的程序的一部分链接在一起?

(在 C++ 中,我相信这是被单一定义规则禁止的。)

最佳答案

结构标签是没有链接的标识符(C11 6.2.2/6)

在6.7/3中找到了关于没有链接的标识符的多个定义的规则:

If an identifier has no linkage, there shall be no more than one declaration of the identifier (in a declarator or type specifier) with the same scope and in the same name space, except that:

  • a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type;
  • tags may be redeclared as specified in 6.7.2.3.

在您的程序中,foo 的两个声明在不同的范围内,因此不满足“具有相同范围”的条件,因此不违反此规则。

关于c - 是否允许不同的翻译单元定义具有相同名称的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426610/

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