MRPT
2.0.1
mrpt
core
initializer.h
Go to the documentation of this file.
1
/* +------------------------------------------------------------------------+
2
| Mobile Robot Programming Toolkit (MRPT) |
3
| https://www.mrpt.org/ |
4
| |
5
| Copyright (c) 2005-2020, Individual contributors, see AUTHORS file |
6
| See: https://www.mrpt.org/Authors - All rights reserved. |
7
| Released under BSD License. See: https://www.mrpt.org/License |
8
+------------------------------------------------------------------------+ */
9
10
#pragma once
11
12
/** \file Usage: MRPT_INITIALIZER(func) { ... }
13
* MRPT_INITIALIZER() should be used only once per library in its present
14
* cross-platform implementation.
15
*/
16
#if defined(_MSC_VER)
17
#include <mrpt/config.h>
18
#if defined(MRPT_BUILT_AS_DLL)
19
#include <windows.h>
20
#define MRPT_INITIALIZER(f) \
21
static void f(); \
22
BOOL WINAPI DllMain( \
23
HINSTANCE
/*hinstDLL*/
, DWORD fdwReason, LPVOID
/*lpvReserved*/
) \
24
{ \
25
switch (fdwReason) \
26
{ \
27
case DLL_PROCESS_ATTACH: \
28
f(); \
29
} \
30
return TRUE; \
31
} \
32
static void f(void)
33
#else
34
// Static libs in Windows: the hardest case, subject to be optimized out
35
#define MRPT_INITIALIZER(f) \
36
static void f(void); \
37
struct f##_t_ \
38
{ \
39
f##_t_(void) { f(); } \
40
}; \
41
static f##_t_ f##_; \
42
static void f(void)
43
#endif
44
#else
45
#define MRPT_INITIALIZER(f) \
46
static void f(void) __attribute__((constructor)) __attribute__((used)); \
47
static void f(void)
48
#endif
Page generated by
Doxygen 1.8.14
for MRPT 2.0.1 Git: 0fef1a6d7 Fri Apr 3 23:00:21 2020 +0200 at vie abr 3 23:20:28 CEST 2020