inline int factorial(int n)
{
if(!n) return 1;
else return n*factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)
在我阅读本文时,发现如果编译器没有正确处理上述代码会导致"无限编译".
编译器如何决定是否内联函数?
DebugUtil.h
#ifndef DEBUG_UTIL_H
#define DEBUG_UTIL_H
#include <windows.h>
int DebugMessage(const char* message)
{
const int MAX_CHARS = 1023;
static char s_buffer[MAX_CHARS+1];
return 0;
}
#endif
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我收到此错误:
Terrain.obj:错误LNK2005:已在Loodus.obj中定义的"int __cdecl DebugMessage(char const*)"(?DebugMessage @@ YAHPBD @ Z)
Renderer.obj:错误LNK2005:已在Loodus.obj中定义的"int __cdecl DebugMessage(char const*)"(?DebugMessage @@ YAHPBD @ Z)
test.obj:错误LNK2005:已在Loodus.obj中定义的"int __cdecl DebugMessage(char const*)"(?DebugMessage @@ YAHPBD @ Z)
C:\ Users\Tiago\Desktop\Loodus Engine\Debug\Loodus Engine.exe:致命错误LNK1169:找到一个或多个多重定义的符号
但为什么会这样呢?我在标题中有#ifndef #define和#endif,因此不应该发生多个定义