c - 指向数据类型的单个对象/实例的指针的命名

标签 c types syntax terminology

序曲...

在我工作的地方,人们说我的术语有误或我发明了自己的术语。我的老板说在团队中工作时使用正确的术语非常重要。

问题

在 C 中,当我们引用指向任何数据类型的指针时,正确的术语是什么?例如,我想创建一个 send() 函数的宏函数,如下所示:

size_t send_stub (socket, void* , size_t);

#define send_str(sock, str) send_stub(sock, str, strlen(str))

然后它将为具有已知大小的数据类型(如指针、字节、int16、int32、int64、数组、结构、枚举)创建这样一个宏,但我想为所有这些类型创建一个宏函数。它会叫什么?

#define send_?(sock, ?) send_stub(sock, ?, sizeof(?))

最佳答案

我认为我们可以在这里从 C 标准本身起带头作用。我将引用 C11 标准草案 n1570。

3. Terms, definitions, and symbols

3.15 object
1 region of data storage in the execution environment, the contents of which can represent values
2 NOTE When referenced, an object may be interpreted as having a particular type; see 6.3.2.1.

似乎就在你的巷子里。如果您假设作为宏参数提供的标记是一个计算结果为指向单个对象的指针的表达式,那么 send_object 似乎是合适的。

#define send_object(sock, obj_ptr) send_stub(sock, (obj_ptr), sizeof *(obj_ptr))

如果我们还假设指针指向一个完整的对象类型,那么 sizeof *(obj_ptr) 就是该对象的大小。

关于c - 指向数据类型的单个对象/实例的指针的命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998075/

相关文章:

c - 打印字符数组

typescript - 映射类型时省略只读属性

mysql - MySQL中图像数据的数据类型

javascript - Ruby on Rails 3 中 javascript_include 的 <%= 和 <%=# 有什么区别

java - 在查询执行期间提供的参数列表中找不到查询参数 foo

c++ - C++ 宏中的 "##"是什么意思?

c - 抛出异常 : Access violation writing location for Matlab Coder in Visual Studio

c - C中奇怪的工作循环

grails - 在grails中传递 boolean 值而不是 boolean 值

java - 备用java语言