Основной вопрос: есть ли переносная (или, по крайней мере, библиотека, которая находится в большинстве компиляторов) способ запроса типа указателя void * во время выполнения? В частности, можно ли определить, имеет ли указатель тип struct x или тип struct y (в качестве примера).Есть ли способ переносить тип указателя void *?
Дополнительная информация: Я знаю, что gcc предлагает оператор typeof, но я хочу более портативный, менее компиляторный способ выполнения одной и той же вещи.
Требования:
не должна быть полностью зависит от компилятора. Сюда относятся макросы, специфичные для компилятора, и другие функции, обычно не используемые в большинстве компиляторов.
Я бы предпочел функцию, которая работает на любом компиляторе по сравнению с любой менее переносимой реализацией (хотя я буду принимать ответ, который наилучшим образом соответствует моим целям).
Вполне возможно предложить использовать функцию в библиотеке, которая не находится в функции C11, но обычно встречается в большинстве компиляторов. Убедитесь, что вы объясните, как это работает, и аргументы.
'typeof' задает статический тип (т. Е. Объявленный тип); если вы примените его к выражению 'void *', то тип 'void *', а не то, что он изначально был (если что-то, кроме 'void *'). – mafso
Хммм ... ну, в любом случае это будет бесполезно; почему они включают, что, если он не может сказать вам одно, что вам нужно знать? –
'#define SWAP (x, y) do {typeof (x) _tmp = (x); (x) = (y); (y) = _tmp; } while (0) ', например. В C нет информации о типе времени выполнения, если вам нужна эта информация, вы должны явно хранить ее где-то. – mafso