gpt4 book ai didi

c++ - 隐藏初始化代码 "before main"是好习惯吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:15:53 24 4
gpt4 key购买 nike

我正在构建一个 c++ 库,我需要为我的程序(和其他默认资源对象)初始化一个 openGL 上下文。在 main 之前调用的代码块中“隐藏 Init.code”是否是好的做法(考虑现代 c++ 语义)?我不能使用静态变量,因为我需要按特定顺序初始化事物! (我不能在 openGLm 或 SDL 之前初始化纹理!)

这是我的代码:

#include <stdio.h>

#ifdef _MSC_VER // For msvc / msvc++ 2015

#define CCALL __cdecl
#pragma section(".CRT$XCU",read)
#define INITIALIZER(f) \
static void __cdecl f(void); \
__declspec(allocate(".CRT$XCU")) void (__cdecl*f##_)(void) = f; \
static void __cdecl f(void)

#elif defined(__GNUC__) for gcc / g++

#define CCALL
#define INITIALIZER(f) \
static void f(void) __attribute__((constructor)); \
static void f(void)

#endif

static void CCALL finalize(void)
{
/* Some king of delete / dispose here : like SDL_Quit, ... */
}

INITIALIZER(initialize)
{
/*
HERE IS THE STARTUP CODE ...

*/

}

最佳答案

Would it be good practice ( considering modern c++ semantics ) to "hide the Init. code" in a code chunk being called before main ?

因为不能保证全局静态对象的初始化顺序,所以我通常认为这种做法很糟糕。另一个原因 - 为此类代码提供诊断并非易事,并且会产生人为问题,无需使用此方法即可轻松避免。有异常(exception),但它们很少见,绝对没有那么多的人认为这是一种好的做法。

关于c++ - 隐藏初始化代码 "before main"是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com