-2

明確に、私のサンプルをご覧ください

main.cpp と myfunction.h の 2 つのファイルがあります。

これは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」を印刷したいのですが、このコードは正しくありません。私を助けてください!どうもありがとう!

4

3 に答える 3

1

複数のファイルに含める場合は、1 つのソース ファイルとヘッダー ファイルではなく、 2 つのソースファイルを作成する必要があります。

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);
}

main.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

これで、 2 つのファイルmyprogramから作成されたという実行可能プログラムが作成されました。

于 2012-08-09T08:11:28.393 に答える
0

setjmpについては何も知りませんが、コードに少なくとも1つの間違いがあります。

-#include <myfunction.h>
+#include "myfunction.h"
于 2012-08-09T04:57:25.890 に答える
0

.h ファイルに非インライン関数が定義されています。違法ではありませんが、これはほとんど常に間違っています。

.h ファイルで定義された静的グローバル変数があります。違法ではありませんが、これはほとんど常に間違っています。

于 2012-08-09T05:00:43.033 に答える