前奏......
在我工作的地方,人们说我有错误的术语或发明自己的术语。我的老板说,在团队中工作时,正确的术语非常重要。
这个问题
在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标准中脱颖而出。我将引用n1570,即C11标准草案。
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)
就是该对象的大小。