This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Can we get C/C++ struct's member number, type, name, and format string?


On 01/18/2017 07:19 PM, hank fu wrote:
Can we get C/C++ struct's member number, type, name, and format string?

Here is one example.
struct c_test_struct_type {
int i_var;
unsigned int ui_var;
long l_var;
unsigned long ul_var;
}
Is there one an operator provided by GCC to determine the member
nubmer of this struct? For example, I hope to get 4 by calling
'__struct_member_number__(struct c_test_struct_type)' .
Is there one an operator provided by GCC to get the member name of
this struct? For example, I hope to get string 'i_var' by calling
'__struct_member_name__(struct c_test_struct_type, 0)'.
Is there one an operator provided by GCC to get the member type of
this struct? For example, I hope to get string 'int' by calling
'__struct_member_type__(struct c_test_struct_type, 0)'.
Is there one an operator provided by GCC to get the formatted string
of this struct? For example, I hope to get string "i_var: %d, ui_var:
%u, l_var: %ld, llvar: %lld" by calling
'__struct_member_print_format__(struct c_test_struct_type, 0)'.

It's certainly possible to determine the basic type of a member, in
C++ by using templates and in C via _Generic.  From type it's then
straightforward to determine the printf format string.

As Jonathan said, there is mechanism to obtain its name or positional
number, though it should be relatively easy project to implement a pair
of GCC built-in functions to obtain these.

Martin


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]