C 结构体的前向声明?

2023-12-26

#include <stdio.h>

struct context;

struct funcptrs{
  void (*func0)(context *ctx);
  void (*func1)(void);
};

struct context{
    funcptrs fps;
}; 

void func1 (void) { printf( "1\n" ); }
void func0 (context *ctx) { printf( "0\n" ); }

void getContext(context *con){
    con=?; // please fill this with a dummy example so that I can get this working. Thanks.
}

int main(int argc, char *argv[]){
 funcptrs funcs = { func0, func1 };
   context *c;
   getContext(c);
   c->fps.func0(c);
   getchar();
   return 0;
}

我在这里缺少一些东西。如何解决这个问题?


结构体(没有 typedef)在使用时通常需要(或应该)带有关键字 struct。

struct A;                      // forward declaration
void function( struct A *a );  // using the 'incomplete' type only as pointer

如果您输入结构体,则可以省略 struct 关键字。

typedef struct A A;          // forward declaration *and* typedef
void function( A *a );

请注意,重用结构名称是合法的

尝试在代码中将前向声明更改为:

typedef struct context context;

添加后缀来指示结构名称和类型名称可能更具可读性:

typedef struct context_s context_t;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 结构体的前向声明? 的相关文章

随机推荐

  • 检查集合的集合是否成对不相交

    确定集合是否成对不相交的最有效方法是什么 即验证所有集合对之间的交集是否为空 这样做的效率如何 当且仅当它们并集的大小等于它们大小之和时 集合中的集合是成对不相交的 此语句适用于有限集 def pairwise disjoint sets
  • 当元素进入视口时 JavaScript/jQuery 添加类?

    当我想要应用类的元素进入视口时 有没有办法添加类 或者当屏幕底部距离元素顶部一定距离时 现在我想要使用这样的效果 if document scrollTop gt 100 graph line two addClass graph 75 问
  • 从域中提取二级域? - Python

    我有一个域列表 例如 英国网站 site com 英国网站 网站 jpn com 英国网站 site it 域名还可以包含第三级和第四级域 例如 test example site org uk test2 site com 我需要尝试提取
  • 更新多个 SharePoint 列表项

    我有一个 InfoPath 表单 当提交到 SharePoint 表单库时 还会将单个项目添加到任务列表中 任务列表中的每个项目都包含一个人员字段 该字段可能包含多个姓名 我的表单中的代码可以在自定义列表中创建单独的项目 每个项目对应 人员
  • 为公共 GKE 集群设置 Cloud NAT

    我想设置一个 NAT 网关 使用云NAT https cloud google com nat docs overview 以便公共 GKE 集群中的 VM Pod 使用静态 IP 地址 我面临的问题是 NAT 网关似乎只能在虚拟机没有其他
  • 如何获取 JavaFX 中 ListView 中项目的位置?

    如果我在 JavaFX 中创建一个 ListView 如下所示 ObservableList
  • Instruments 4.1 对从 Xcode 4.1 启动的项目没有响应,直到按下 Cmd-Tab

    If I open Instruments and select a standard application e g Mail or MS Word it has no issue If I am in Xcode and I go to
  • Python - urllib2 超时

    我得到的东西如下是我的代码片段 opener urllib2 build opener redirect handler MyHTTPRedirectHandler opener addheaders Accept encoding gzi
  • 全球化现有的 Windows 窗体应用程序?

    我有一个使用 VS 2005 和 net Framework 2 0 开发的现有 winforms 应用程序 现在我们需要全球化这个应用程序 两个语言环境是德语和日语 我知道我们可以使用表单的 localize 属性来创建本地化的表单资源
  • 过渡动画在 SwiftUI 中无法正常工作

    我正在尝试创建一个非常简单的过渡动画 通过点击按钮在屏幕中央显示 隐藏消息 struct ContentView View State private var showMessage false var body some View ZSt
  • Spring Batch - 每次创建一个新文件而不是覆盖它以将数据从 CSV 传输到 XML

    我是新来的Spring Batch 我试图将数据从CSV file to XML file 能够成功转移它 但是 当我每次运行代码时 我的 XML 输出文件 都会被覆盖 这是我不想要的 相反 我想为每次运行创建新的输出文件 旧的输出文件应该
  • 媒体查询问题:Safari 无法缩放 REM 中的元素

    我的布局是基于 rem 的 最近我注意到 Safari 桌面版和移动版 仅缩放字体大小 但不缩放其他元素 具体来说 它使用第一个媒体查询来缩放元素 在 Chrome 和 Firefox 中一切正常 HTML h1 Hello Circle
  • 将java代码转换为coldfusion代码(CFIMAP)

    我正在尝试设置与 Office365 邮箱的连接 该函数基于 java 示例 请参阅https stackoverflow com a 28689722 2482184 https stackoverflow com a 28689722
  • google.setOnLoadCallback(initialize) 函数到底是什么意思?

    在编写 JavaScript 和 Ajax 代码时 没有关于此函数的适当文档 我使用搜索这个词api src http www google com jsapi and searchControl execute abhilashm86 这
  • Java 枚举定义

    我以为我很了解 Java 泛型 但后来我在 java lang Enum 中遇到了以下内容 class Enum
  • 这些会被视为神奇数字吗?

    我刚刚完成了编程课程的程序编写 我想避免使用幻数 所以这是我的问题 在下面的函数中 我的数组索引器会被视为幻数吗 Code string CalcGrade int s1 int s2 int s3 double median const
  • 重新映射 tkinter 中的默认键绑定

    我正在向我的根窗口添加一个键绑定 Tk 实例 其中包含一个文本小部件 root bind Control o setconnpanelopen 问题是 似乎control o默认情况下绑定到 插入换行符 因此我的程序会触发 但它也会插入换行
  • Fortran 命令行参数

    在 g 中我使用的是getopt long处理命令行选项 有吗 存在同样的事情Gfortran https en wikipedia org wiki Gfortran 我希望能够将参数传递给一些 Fortran 单元测试 目前我有以下内容
  • 在 Qt 中实现撤消 - 重做功能?

    我的程序由多个组成QLineEdit在我的QMainWindow 用户可以在任意位置更改文本QLineEdit 目前我可以执行撤销重做每个的默认实现QLineEdit当各自的QLineEdit被选中 但是我想添加功能 以便当我的undo然后
  • C 结构体的前向声明?

    include