指向数据类型的单个对象/实例的指针的命名
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)
就是该对象的大小。
【讨论】:
我也喜欢对象和字符串是相同长度的单词,在字符串宏下定义时对齐很好哈哈。 (如果你认为我是可读性的粉丝,那你是对的)。以上是关于指向数据类型的单个对象/实例的指针的命名的主要内容,如果未能解决你的问题,请参考以下文章