haiku/headers/private/kernel/util/kernel_c.h
Ingo Weinhold fc7864091e Attempt at allowing to use C++ structures in C only code: We use the
CreateAsmStructOffsetsHeader mechanism to generate a header with macros
defined to the sizes of the structures we're interested in and when compiling
in C mode define the structures as "struct { char bytes[size]; }".
It works in principle, but due to how jam works, one would have to specify the
dependency to the generated header for all sources that include it directly or
indirectly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34441 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-12-02 10:56:10 +00:00

32 lines
868 B
C

/*
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_UTIL_KERNEL_C_H
#define _KERNEL_UTIL_KERNEL_C_H
/*! Defines a structure that has the size of a certain C++ structure.
\param name The name of the C++ structure.
\param flatName The name of the structure to be defined.
*/
#define DEFINE_FLAT_KERNEL_CPP_STRUCT(name, flatName) \
struct flatName { \
char bytes[_KERNEL_CPP_STRUCT_SIZE_##name]; \
};
/*! In C mode DEFINE_KERNEL_CPP_STRUCT() defines a struct \a name with the
size of the C++ structure of the same name. In C++ it is a no-op.
*/
#ifdef __cplusplus
# define DEFINE_KERNEL_CPP_STRUCT(name)
#else
# define DEFINE_KERNEL_CPP_STRUCT(name) \
DEFINE_FLAT_KERNEL_CPP_STRUCT(name, name) \
typedef struct name name;
#endif
#endif /* _KERNEL_UTIL_KERNEL_C_H */