Наименование указателя на отдельный объект / экземпляр типа данных - PullRequest
0 голосов
/ 05 марта 2019

Прелюдия ...

Когда я работаю, люди говорят, что у меня неправильная терминология или я придумываю свою собственную.Мой начальник говорит, что правильная терминология очень важна при работе в команде.

Вопрос

В C, какой термин следует использовать, когда мы имеем в видууказатель на любой тип данных?Например, я хочу создать макрофункции для функции send(), например:

size_t send_stub (socket, void* , size_t);

#define send_str(sock, str) send_stub(sock, str, strlen(str))

, а затем последует создание такого макроса для типов данных с известным размером, таких как указатели, byte, int16, int32,int64, массивы, структуры, перечисления, но я хотел бы создать одну макрофункцию для всех них.Как бы это называется?

#define send_?(sock, ?) send_stub(sock, ?, sizeof(?))

1 Ответ

0 голосов
/ 05 марта 2019

Я думаю, что мы можем взять наше лидерство от самого стандарта 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) - это размер этого объекта.

...