有人可以解釋幕後導致此用戶錯誤不一致崩潰的原因。C C++函數名稱衝突和崩潰不一致
這裏的主要功能是
#include "foo.h"
inline int Bar(const int &a)
{
...
}
...
int b=Bar(a);
在 「foo.c的」 也有功能
inline int Bar(const int &a)
副本這是問題所在。我不擁有foo.h也不擁有foo.C,並且在foo.h中沒有Bar(int)的聲明。 所有編譯和工作正常與舊版本的foo.h和foo.C
在我的同事更新他的foo.C中的一些其他功能後,代碼仍編譯好,但它開始崩潰執行。
通過ddd進行調試表明,當我的主函數調用Bar()時,它實際上調用了foo.C中的Bar()而不是我自己定義的Bar()。
因爲修復是靜態我自己的功能或更改我自己的Bar()函數的名稱。
我知道寫這樣的代碼是混亂的,並且很容易出現這樣的錯誤。有人可以向我解釋爲什麼代碼崩潰不一致?
謝謝大家
問候
是有一些原因,你不能只命名函數別的東西嗎?的 – Wug 2012-07-13 20:41:35
可能重複[它是一個未定義的行爲有一個內聯函數的定義不同?(http://stackoverflow.com/questions/11200805/is-it-an-undefined-behavior-to-have-different-definitions內聯函數) – 2012-07-13 21:19:18
這個問題有點混亂,因爲標題中顯示「C」,而你的文件是「foo.c」(而不是「foo.cxx」或「foo.cpp」),但你顯然是用C++編寫的(參考文獻)。無論如何,這違反7.1.2(4)。 – 2012-07-13 21:21:40