Man*_*lio 0 c architecture standards
我想知道是否有一种标准方法来解决我面临的问题:
我正在用C编写一个库.lib将提供不同类型的函数,例如用特定类型的数据填充数组或用这些数据进行计算的函数.
lib应该有助于解决特定问题,因此可以预期在开始时创建的数据将用于稍后进行计算.
因此,有一些数据应该在问题解决过程中"共享"(例如数组的大小或一些对计算有用的其他参数).
我想避免将这些数据作为每个函数的参数(即将数组的大小传递给每个函数).
我的想法是:
创建一组只能从库函数访问的静态全局变量.
为这些变量创建一个setter/getter,定义一个自定义enum
类型,用于解决设置/获取的确切变量(即set(kScaleFactor, 10)
).
然而,正如我之前所说,是否有一种"标准"(或常用)方式来解决这个问题?我的方法可以考虑好吗?
许多库使用问题的每个"实例"的"句柄"概念.这样,您可以同时打开多个句柄,而不会弄乱彼此的执行,即使调用是散布的.
示例:C的标准输入输出有一个FILE
句柄,libcURL有一个CURL
句柄.
使用它们时的程序流程通常是这样的[我正在使用一个虚构的库foo
]:
FOO handle = foo_init (...);
- 您获得handle
特定于您的问题的.FOO
通常是指向不透明结构的指针,该结构包含特定于您要解决的问题的特定"实例"的所有信息.库提供的所有其他功能都带有一个FOO handle
参数,因此他们知道他们正在处理的问题的哪个实例.如果init
失败,你得到一个NULL
.
errorcode = foo_set_option (handle, OPTION,...);
- 然后,您可以设置一些关于库在解决问题时应该如何表现的特殊选项.这可能是可选的.在内部,这可能会更改指向的结构handle
以设置选项.
errorcode = foo_execute (handle);
- 您执行解决方案.
您可能希望通过调用另一个库函数来"读取"解决方案.同样,handle
是一个参数.
foo_cleanup (handle);
- 完成后,让库清理它分配的所有内部数据结构,并释放它占用的任何其他资源.