为清楚起见,请查看我的样本
我有两个文件: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 :(得分: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);
}
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
现在您有一个名为myprogram
的可执行程序,该程序由两个文件组成。
答案 1 :(得分:0)
我对setjmp一无所知,但你的代码中至少有一个错误:
-#include <myfunction.h>
+#include "myfunction.h"
答案 2 :(得分:0)
您在.h文件中定义了非内联函数。虽然不是非法的,但这几乎总是错误的。
您在.h文件中定义了一个静态全局变量。虽然不是非法的,但这几乎总是错误的。