Как получить имя поля структуры в виде строки в Си?
Есть какая-то структура
typedef struct someStruct
{
uint8_t someField;
uint8_t anotherField;
}someStruct_t;
Нужно получить строку которая будет соответствовать имени поля этой структуры. Например:
char field_name [] = SOME_MACRO(someStruct_t.someField); // Нужно получить строку "someField"
Возможно ли это реализовать средствами языка С (cтандарт C99)?
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
На Си++ можно так:
#define FIELD_NAME(s,f) (sizeof(s::f), #f)
если не компилируется, то версия для Си:
#define FIELD_NAME(s,f) (sizeof(((s*)0)->f), #f)
В обоих случаях использовать так:
const char *name = FIELD_NAME(someStruct_t, someField);
Если написать несуществующее имя поля, то не скомпилируется.
#include <stdio.h>
#include <stdint.h>
typedef struct someStruct
{
uint8_t someField;
uint8_t anotherField;
} someStruct_t;
#define FIELD_NAME(s,f) (sizeof(((s*)0)->f), #f)
int main()
{
const char *name = FIELD_NAME(someStruct_t, someField);
puts(name);
return 0;
}
#include <stdio.h>
#include <stdint.h>
typedef struct someStruct
{
uint8_t someField;
uint8_t anotherField;
} someStruct_t;
#define FIELD_NAME(s,f) (sizeof(s::f), #f)
int main()
{
const char *name = FIELD_NAME(someStruct_t, someField);
puts(name);
return 0;
}