Merge branch 'sizeof-member' into 'master'

Add and use g_sizeof_member() macro

See merge request GNOME/glib!1333
This commit is contained in:
Philip Withnall
2020-01-22 11:07:03 +00:00
6 changed files with 28 additions and 5 deletions

View File

@@ -1096,4 +1096,18 @@
#endif /* __GI_SCANNER__ */
/**
* G_SIZEOF_MEMBER:
* @struct_type: a structure type, e.g. #GOutputVector
* @member: a field in the structure, e.g. `size`
*
* Returns: the size of @member in the struct definition without having a
* declared instance of @struct_type.
*
* Since: 2.64
*/
#define G_SIZEOF_MEMBER(struct_type, member) \
GLIB_AVAILABLE_MACRO_IN_2_64 \
sizeof (((struct_type *) 0)->member)
#endif /* __G_MACROS_H__ */

View File

@@ -50,6 +50,13 @@ test_alignof_fallback (void)
check_alignof (struct { char a; int b; });
}
static void
test_struct_sizeof_member (void)
{
G_STATIC_ASSERT (G_SIZEOF_MEMBER (struct { char a; int b; }, a) == sizeof (char));
g_assert_cmpint (G_SIZEOF_MEMBER (struct { char a; int b; }, b), ==, sizeof (int));
}
int
main (int argc,
char *argv[])
@@ -58,6 +65,7 @@ main (int argc,
g_test_add_func ("/alignof/fallback", test_alignof_fallback);
g_test_add_func ("/assert/static", test_assert_static);
g_test_add_func ("/struct/sizeof_member", test_struct_sizeof_member);
return g_test_run ();
}