c++ - 一种为 c 执行 c++ "typedef struct foo foo;"的方法

标签 c++ c gcc typedef

按照 gcc 4.4.2 版,似乎是这样说的

typedef struct foo foo;
// more code here - like function declarations taking/returning foo*
// then, in its own source file:
typedef struct foo
{
    int bar;
} foo;

在 C++ 中是合法的,但在 C 中不是。

当然,我有一段代码可以通过使用 foo 类型在 C++ 中编译得很好,但看来我必须让它使用 struct foo(在头文件中) 让它与其他开发人员编写的一些 C 代码一起工作。

有没有一种方法可以在 gcc C 中预先声明 struct typedef foo foo 而不会在为 C 编译时出现“typedef 'foo' 的重新定义”错误? (我不想要 struct typedef _foo foo 的边缘非法和不太干净的下划线解决方案)

最佳答案

这是你需要的吗?

// header (.h)
struct foo;
typedef struct foo foo;

foo *foo_create();
// etc.

// source (.c)
struct foo {
    // ...
}

在键入定义时,我也倾向于在我的结构名称前加上下划线,以明确其隐私性并防止可能的名称冲突。

关于c++ - 一种为 c 执行 c++ "typedef struct foo foo;"的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1980326/

相关文章:

c - 终止 While 循环 scanf ("%c",&ch)

c - Swift/C 互操作,Swift 中的结构数据更改未在 C 中更新

c - C 编译器如何处理后增量 (i++),内存明智?

c++ - 如何打包python模块依赖的共享对象?

c++ - 如何在 Qt 中再次使菜单项变灰

c++ - 如何找到字符串列表中所有项目的公共(public)部分?

c++ - 链接到同一个二进制文件时,不同库中的相同符号不会重新定义?

c - 在 printf 上显示带有空格的单个数字

c++ - 避免 unix 中的标准库冲突

c - 使用 __attribute__((aligned(X)) 的副作用