Поиск элементов в структуре на языке Си - PullRequest
0 голосов
/ 14 января 2011

Можно ли определить элементы (имя и тип данных) в структуре (язык C) в библиотеке? Если да, то как это сделать на языке Си? Если язык C не поддерживает его, возможно ли получить элементы структуры с помощью других приемов или есть какой-нибудь инструмент для этого?

Ответы [ 3 ]

5 голосов
/ 14 января 2011

Вы имеете в виду выяснить, когда вы программируете или динамически во время выполнения?

Для первого, конечно.Просто найдите .h файл, который вы включаете, и вы найдете там определение структуры, включающее все поля.

Для последнего нет, это невозможно.C компилирует структуры в машинный код таким образом, что вся эта информация теряется.Например, если у вас есть структура {int x, float y, int z}, и у вас есть некоторый код, который говорит в машинном коде

a = mystruct.y

, все, что останется, это что-то вроде поиска указателя на mystruct, добавив 4к нему (размер int), и читает оттуда 4 байта, а затем делает с ним некоторые операции с плавающей запятой.Ни имена, ни типы этих структурных полей вообще не будут доступны, и, следовательно, невозможно найти их во время выполнения.

3 голосов
/ 14 января 2011

Нет, это невозможно.C не имеет встроенной поддержки стиля отражения.

0 голосов
/ 14 января 2011

Если под «определять элементы структуры» вы подразумеваете «получить объявление этого типа структуры программно», то я не верю, что это возможно - по крайней мере, не переносимо. В отличие от более современных языков, таких как C ++ или Java, C не сохраняет информацию о типе в форме, доступной для реальной программы.

EDIT:

Чтобы уточнить мой комментарий о невозможности "переносимо":

Вполне может существовать некоторая комбинация формата компилятор + отладка, которая бы встраивала необходимую информацию в создаваемые им объектные файлы, хотя я не могу сказать, что я знаю об этом. Затем вы можете, гипотетически, заставить программу открыть собственный исполняемый файл и проанализировать отладочную информацию. Но это громоздкий и хрупкий подход, в лучшем случае ...

Зачем вам нужно что-то подобное?

...