2012-08-09 41 views
-2

爲清楚,請查看我的樣品jmp_buf

我有兩個文件:main.cpp中和myfunction.h

這是main.cpp中

#include <setjmp.h> 
#include <myfunction.h> 

int main() 
{ 
    if (! setjmp(bufJum)) { 
     printf("1"); 
     func(); 
    } else { 
     printf("2"); 
    } 
    return 0; 
} 

這是myfunction的.h

#include <setjmp.h> 
static jmp_buf bufJum; 

int func(){ 
    longjum(bufJum, 1); 
} 

現在,我想讓我的屏幕打印「1」,然後打印「2」,但此代碼不正確! 請幫幫我! 非常感謝!

+0

請告訴我們究竟發生了什麼,而不僅僅是說它不起作用。它會崩潰嗎?它什麼都不輸出?有些東西,但錯誤的東西?如果是這樣,什麼? – KRyan 2012-08-09 04:56:57

+2

我很驚訝你沒有得到一個錯誤,當你建立這個,因爲你定義變量'bufJum'兩次,_and_ spell'longjmp'錯誤! 1:不要將定義放在頭文件中; 2:如果你想從多個源文件訪問一個變量,不要使它成爲'static'; 3:避免'setjmp' /'longjmp'作爲瘟疫!它在C++中不能很好地運行,如果你不是非常小心的話,它實際上可能會產生很多奇怪的運行時錯誤。 – 2012-08-09 05:51:29

+1

此外,說「此代碼不正確」是不夠的一個問題描述。 **編譯/鏈接/運行時會發生什麼**?如果有錯誤消息,請將它們(逐字,即複製粘貼)添加到問題中。另外,你沒有使用'setjmp' /'longjmp'是_multiple_文件,因爲你將_including一個文件放到另一個文件中,編譯器實際上只會看到一個文件。 – 2012-08-09 06:17:31

回答

1

如果你想擁有它的多個文件,然後你需要創建兩個文件,而不是一個單一的源文件和頭文件

myfunction.cpp:

#include <setjmp.h> 

extern jmp_buf bufJum; // Note: `extern` to tell the compiler it's defined in another file 

void func() 
{ 
    longjmp(bufJum, 1); 
} 

主.cpp:

#include <iostream> 
#include <setjmp.h> 

jmp_buf bufJum; // Note: no `static` 

void func(); // Function prototype, so the compiler know about it 

int main() 
{ 
    if (setjmp(bufJum) == 0) 
    { 
     std::cout << "1\n"; 
     func(); 
    } 
    else 
    { 
     std::cout << "2\n"; 
    } 

    return 0; 
} 

如果你使用GCC來編譯這些文件,你可以例如使用此命令行:

 
$ g++ -Wall main.cpp myfunction.cpp -o myprogram 

現在你有一個叫myprogram可執行程序是從文件進行。

+0

太棒了! 這是我需要的! 非常感謝您的幫助! – Phien 2012-08-10 02:05:05

0

我不知道任何事情了setjmp,但你必須在你的代碼中的至少一個錯誤:

-#include <myfunction.h> 
+#include "myfunction.h" 
+0

不要提及它。 當您包含路徑時,此代碼可能在代碼塊中運行。 – Phien 2012-08-09 07:16:21

0

你在.h文件中定義的非內聯函數。雖然不違法,但這總是錯誤的。

您在.h文件中定義了一個靜態全局變量。雖然不違法,但這總是錯誤的。

+0

對不起,我的代碼,但我想知道在不同的文件中使用setjmp和longjmp時可能或不可能。不要在變量上提及。我只知道如何在不同的文件中使用setjmp和longjmp。如果可能的話,該怎麼做? 謝謝! – Phien 2012-08-09 07:12:28

相關問題