2011-04-21 57 views
1

我寫了一個庫,我試圖靜態鏈接到我的主程序。我的主程序是用C++編寫的,但是庫是用C語言編寫的。我注意到庫中的一些調試printf語句運行了兩次,出於某種原因它們不應該出現,所以我開始註釋掉代碼。我現在留給這個(評論除外):printf打印兩次出於某種原因,cout似乎沒問題,雖然

#include <iostream> 
extern "C" 
{ 
    include "audio.h" 
} 

int main(int argc, char** argv) 
{ 
    std::cout << "Hello" << std::endl; 
    audio_test(); 
    std::cout << "World" << std::endl; 
    return 0; 
} 

功能音頻測試根本沒有意思。這是來自我想在我的C++項目中使用的C文件。

void audio_test() 
{ 
    printf("TEST\n"); 
} 

從我的程序的輸出是這樣的:

Hello 
TEST 

TEST 
World 

我在這一點爲什麼發生這種情況不知道。

+1

在「Hello」和std :: endl之前缺少「<<」。 – 2011-04-21 18:37:26

+0

@Alex:要說清楚,你是說這兩個代碼片段是完整地顯示你的代碼的? – NPE 2011-04-21 18:38:24

+3

請提供完整的可編譯示例。然後編譯它並確保它確實按照你所說的做。 – 2011-04-21 18:38:43

回答

2

撥打std::ios_base::sync_with_stdio(true)它可能會更好。

+0

我認爲標準要求他們始終保持同步..? – 2011-04-21 18:46:14