序曲...
在我工作的地方,人们说我用错了术语或发明了自己的术语。我的老板说,在团队合作中,正确的术语非常重要。
问题
在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(?))
答案 0 :(得分:2)
我认为我们可以在这里从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)
是该对象的大小。