我没有尝试使用两个具有相同名称的不同结构,而是在两个不同的时间(可能在不同的头文件中)定义相同的结构。
例如:
struct foo {
int bar;
};
struct foo {
int bar;
};
给出错误。
答案 0 :(得分:2)
否强>
这样做绝对没有意义。如果您有一个供多个编译单元使用的结构,请将其放在.h
头文件中,并#include
来自那些.c
文件。或者,如果您需要多个头文件,只需包含那些公共头文件。
现在,如果你不需要实际的结构定义,而只需要声明它存在(所以你可以创建指向所述struture的指针),你可以使用转发声明:
struct foo; // defined elsewhere
void somefunc(struct foo *ptr);
答案 1 :(得分:2)
简答:否
编译器并不那么聪明 - 你已经拥有struct foo
,所以即使你认为它与第一个struct foo
相同,你也不能拥有另一个RewriteCond %{QUERY_STRING} (^|\?)mode=thread&id=([0-9]+)($|&)
RewriteRule ^index\.php$ http://mywebsite.com/threads/%2/? [R=301,L]
。
答案 2 :(得分:1)
否强>
你应该在另一个标题中分隔结构,听起来你可能正在组织你的代码,并且应该重新考虑设计。
您可以使用ifndef:
#ifndef NAMEDEF
struct name {
int val;
};
#define NAMEDEF
#endif
尽管如此,我必须重申您需要重新考虑头文件的设计方式,并将此结构放在一个公共标题中。
也可以使用前瞻声明:
struct name;
void function() {
}
答案 3 :(得分:1)
这样做的方法是用预处理器指令包围你的结构
#ifndef STRUCT_FOO
#define STRUCT_FOO
struct foo {
int bar;
};
#endif /* STRUCT_FOO */
#ifndef STRUCT_FOO
#define STRUCT_FOO
struct foo {
int bar;
};
#endif /* STRUCT_FOO */
这具有仅定义struct foo一次的效果。结合普遍接受的将这样的项目放在名为foo.h
的文件中的做法,就像这样
#ifndef INCLUDE_FOO_H
#define INCLUDE_FOO_H
struct foo {
int bar;
};
#endif /* INCLUDE_FOO_H */
它还可以防止一个人在做
#include "foo.h"
#include "foo.h"
(rest of code)
就重新定义结构而言,C语言中不允许这样做;但是,你可以做一些接近非完全重新定义的事情。我建议避免使用它们,因为它们往往只会使代码更加模糊和难以维护。
答案 4 :(得分:-2)
更改名称或不在一个源文件中使用这两个头文件。命名空间中缺少C编程语言,如果它不是静态的,那么一切都是GLOBAL。
另一种方法是使用宏。但对于真实的项目来说,事情可能过于复杂。
#define foo FOO2
struct foo {
int bar;
};
#undef foo
struct foo {
int bar;
};