C 命名指向数据类型的单个对象/实例的指针
序曲 在我工作的地方,人们说我使用了错误的术语或是发明了自己的术语。我的老板说,在团队中工作时,正确的术语非常重要 问题 在C语言中,当我们引用指向任何数据类型的指针时,正确的术语是什么?例如,我想创建C 命名指向数据类型的单个对象/实例的指针,c,types,terminology,term,C,Types,Terminology,Term,序曲 在我工作的地方,人们说我使用了错误的术语或是发明了自己的术语。我的老板说,在团队中工作时,正确的术语非常重要 问题 在C语言中,当我们引用指向任何数据类型的指针时,正确的术语是什么?例如,我想创建send()函数的宏函数,如下所示: size_t send_stub (socket, void* , size_t); #define send_str(sock, str) send_stub(sock, str, strlen(str)) 接下来将为具有已知大小的数据类型(如指针、字节
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。术语、定义和符号 对象
1执行环境中的数据存储区域,其内容可以表示值
2注:当引用时,对象可能被解释为具有特定类型;见6.3.2.1 看起来很适合你。如果假设作为宏参数提供的标记是一个表达式,其计算结果是指向单个对象的指针,则
send\u object
似乎是合适的
#define send_object(sock, obj_ptr) send_stub(sock, (obj_ptr), sizeof *(obj_ptr))
如果我们还假设指针指向一个完整的对象类型,那么
sizeof*(obj_ptr)
就是该对象的大小。对不起,您所说的“宏函数”是什么意思?我认为您根本不应该像宏那样使用函数,始终直接使用send_stub
。这让你做什么更清楚了。宏通常会使代码更难阅读和理解。所有指针只指向单个对象/实例。所以我认为正确的名字应该是一个“指针”。真是讽刺。宏不是函数。正确的术语是函数式宏。它只是看起来一样,但这两个概念相距甚远。一个试图完成函数工作的宏,我称之为“坏主意”。讽刺的是,我也喜欢object和string是长度相同的单词,在string宏下定义时对齐得很好,哈哈。(如果你认为我是可读性的粉丝,你是对的)。