【发布时间】:2017-12-29 10:02:49
【问题描述】:
我为我正在制作的一个小游戏制作了一个简单的助手库。在这样的库中,我有一些核心函数必须尽可能快地执行,因为它们在每个游戏帧中被调用数千次。
如果我将它们声明为“内联”并将它们的声明 (library.h) 从它们的实现 (library.c) 中分离出来并将它们包含在游戏文件 (game.c) 中,我猜它们没有被内联/优化,因为直接在game.c 中声明它们并使用gcc -O3 编译游戏给了我60 倍以上的性能提升。
为了解决这个问题,我决定让我的库成为一个只有头文件的库。我在library.h 中有我所有的框架常量、变量和函数。将它包含在 game.c 中仍然可以为我提供最佳性能。
现在,问题是每当我在多个文件中包含library.h(比如game1.c 和game2.c)时,我都会在编译游戏时得到一长串duplicate symbol 错误。该库有#pragma once,但问题仍然存在。
如何实际编写仅包含头文件的库或确保外部库中的内联函数实际得到优化?
谢谢
【问题讨论】:
-
您是否在头文件中定义变量或函数?
-
您只想在标头中声明变量并有一个单独的
.c文件用于定义 -
你要声明函数
static。
标签: c