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

Posted

技术标签:

【中文标题】指向数据类型的单个对象/实例的指针的命名【英文标题】:Naming of a pointer to single object/instance of a data type 【发布时间】:2019-07-26 15:23:10 【问题描述】:

前奏……

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

问题

在 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(?))

【问题讨论】:

对不起,“宏函数”是什么意思? 我认为您根本不应该使用类似函数的宏,并且始终始终直接使用send_stub。这让你更清楚你在做什么。宏通常会使代码更难阅读和理解。 所有指针只指向一个对象/实例。所以我认为正确的名字应该是一个“指针”。 确实很讽刺。宏不是函数。正确的术语是类函数宏。只是看起来一样,但两个概念相差甚远。 一个试图完成我称之为“坏主意”的函数的宏。现在这是具有讽刺意味的,处于讽刺的边缘。 【参考方案1】:

我认为我们可以在这里从 C 标准本身取得领先。我将引用 C11 标准草案 n1570。

3.术语、定义和符号

3.15 对象 1 执行环境中的数据存储区域,其内容可以表示值 2 注:当被引用时,对象可能被解释为具有特定类型;见 6.3.2.1。

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

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

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

【讨论】:

我也喜欢对象和字符串是相同长度的单词,在字符串宏下定义时对齐很好哈哈。 (如果你认为我是可读性的粉丝,那你是对的)。

以上是关于指向数据类型的单个对象/实例的指针的命名的主要内容,如果未能解决你的问题,请参考以下文章

JVM笔记5-对象的访问定位。

JS------对象的继承方式

自制反汇编工具使用实例 其一

Objective-C数据类型之id,SEL,BOOL,nil,NULL和NSNull

重温Javascript

HotSpot一个java对象占多少空间