相关疑难解决方法(0)

输入deff指针是个好主意吗?

我查看了一些代码并发现惯例是将指针类型转换为

SomeStruct* 
Run Code Online (Sandbox Code Playgroud)

typedef SomeStruct* pSomeStruct;
Run Code Online (Sandbox Code Playgroud)

这有什么好处吗?

c c++ pointers typedef conventions

68
推荐指数
9
解决办法
4万
查看次数

语义版本控制:更改*应该*通过库函数分配的非不透明结构

我的 C 库,在 1.0.0 版本中,定义了一个结构体和一些用于分配和使用结构体的函数:

typedef struct { int x; int y; } MyStruct;
MyStruct *allocate( int, int );
void destroy( MyStruct* );
void print( MyStruct* );
Run Code Online (Sandbox Code Playgroud)

用户不应该自己分配结构,也不应该按值复制它。这是与语义版本控制问题的主要区别:次要还是主要变化?. 例如,程序应该像这样使用它:

void f(){
  MyStruct *ms = allocate(0,0);
  ms->x += 1;
  print(ms);
  destroy(ms);
}
Run Code Online (Sandbox Code Playgroud)

现在我需要向结构中添加一个新字段,而函数的签名不会改变。

typedef struct { int x; int y; int z; } MyStruct;
Run Code Online (Sandbox Code Playgroud)

新结构比旧结构占用更多内存:如果程序尝试MyStruct直接分配实例或按值复制它,如果它链接到与构建时使用的库版本不同的库版本,则它可能会中断。

然而,这不是程序使用的方式MyStruct:只要它们遵循文档,一切正常。但是代码中没有任何内容可以阻止他们滥用结构。

我正在使用语义版本控制来对我的库进行版本控制。在上述情况下,我应该增加次要版本(以向后兼容的方式添加的功能)还是主要版本(不兼容的 API 更改)?

c semantic-versioning

6
推荐指数
1
解决办法
70
查看次数

标签 统计

c ×2

c++ ×1

conventions ×1

pointers ×1

semantic-versioning ×1

typedef ×1