请教一个编译问题

tomqyp 2007-11-17
我用dmc编译了一个静态库,编译时没有出错但有一些警告比如
Warning: Public '_min_heap_shift_down_' already in library, redefinition ignored. 

编译好后在D程序中链接时报错
Error 1: Previous Definition Different : _min_heap_shift_down_

这个问题通常是什么引起的呢?
tomqyp 2007-11-17
找到原因了,原来是因为函数属性申明的定义时不同
比如
static inline void min_heap_shift_down_();
...
void min_heap_shift_down_();

奇怪的是C不是允许申明过的定义时就可以省略吗?
oldrev 2007-11-17
没听说过能省略 storage class 的,尤其是 static
tomqyp 2007-11-17
确实是在什么书上看到过申明时如果定义过属性定义时就可以省略了,不过不记得是什么书了。
所以做了个小实验
#include "stdafx.h"

static inline int test();

int _tmain(int argc, _TCHAR* argv[])
{
	return test();
}

int test()
{
	return 1;
}

这个代码在VC下通过,实际上发现这个问题的地方是libevent代码中,所以我想gcc应该也是通过的。
Global site tag (gtag.js) - Google Analytics