Для операционной системы VxWorks, они обеспечивают системную библиотеку для задач нерестовых:Почему TaskSpawn принимает ints вместо void *?
int taskSpawn
(
char * name, /* name of new task (stored at pStackBase) */
int priority, /* priority of new task */
int options, /* task option word */
int stackSize, /* size (bytes) of stack needed plus name */
FUNCPTR entryPt, /* entry point of new task */
int arg1, /* 1st of 10 req'd task args to pass to func */
int arg2,
int arg3,
int arg4,
int arg5,
int arg6,
int arg7,
int arg8,
int arg9,
int arg10
)
Вы можете увидеть, насколько ограничены это по сравнению с чем-то вроде станд :: нить.
Обычно я могу передать соответствующие аргументы на основе функции ввода.
Учитывая, что это функция C, мне было интересно, есть ли причина, по которой VxWorks предпочитает иметь аргументы 1-10 быть Интсом вместо пустых указателей.
Если бы они были указателями пустоты, я мог бы пройти любым типом, а затем отбросить его обратно в функцию ввода.
Если я хочу передать указатель struct foo
в функцию ввода, заданную taskSpawn, может ли она быть преобразована в целое число, а затем обратно к соответствующему указателю?
Основываясь на дизайне этой функции, я вынужден использовать глобальные переменные?
Хмм, это звучит как довольно грязный код. Опираясь на детали реализации без необходимости, это плохой стиль. ** Iff ** нужно передать указатель как целое число (в некоторых общих функциях есть веские причины), 'intptr_t' и его sibbling' uintptr_t' следует использовать. Это не только гарантированно удерживает указатель, но также четко указывает, что «этот объект может содержать указатель». – Olaf
@Olaf: Это не актуально здесь, потому что человек, задающий этот вопрос, использует API-интерфейс поставщика, который не может быть изменен. –
Просто возьмите мой комментарий как хороший комментарий. Это имеет важное значение для оценки качества кода и того, насколько хорошо он поддерживается поставщиком. (Я знаю VxWorks). Я не утверждал, что код сломан, хотя, поскольку я очень хорошо понимаю, что код действительно работает на этой платформе. Но есть такой код, который более проблематичен, и это могут прочитать другие люди, которые тоже. – Olaf