Skip to content

This is a demo project that presents how referencing of structure fields by index could be accomplished in C language.

License

Notifications You must be signed in to change notification settings

alexgrusu/xstruct

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xstruct

This is a demo project that presents how referencing of structure fields could be accomplished in C language.

As it is well known, the access to structure members by index is not possible according to C language standard. In C++ this functionality can be emulated by using a C++ specific pointer type, known as "pointer-to-data-member". C language has no such type, but it can be emulated by using the standard offsetof macro and pointer arithmetics.

Suppose that an API responds with the same structure of data (e.g., a string that consists different types of data) for each specific request, then the main idea is to initialize a structure with the received data (each data having a different type).

In this demo project, two different methods of structure referencing are depicted. The first method(*) exploits structure referencing through dynamic memory allocation and pointer synchronization. The second variant(+) is a more fashion approach, tailored with pre-processing techniques and macros. These two methods can be found in the ntpq_serial(*) and ntpq_refl(+) folders.

Both methods read the output of the following command:

$ ntpq -np | grep -i "\*"

that returns

93.190.144.28   .GCC.            1 u   69 1024  377   37.091  -18.992   3.993

where each data is designated below

remote           refid          st t when poll  reach delay   offset   jitter.

As a result, the unix command output is load in a ntpq structure that contains the fields:

  • remote (int8_t[128]);
  • refid (int8_t[128]);
  • stratum (int32_t);
  • type (int8_t);
  • when (int32_t);
  • poll (int32_t);
  • reach (int32_t);
  • delay (float);
  • offset (float);
  • jitter (float)

Therefore, all data can be used in certain ways.

About

This is a demo project that presents how referencing of structure fields by index could be accomplished in C language.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published