繁体   English   中英

C代码setjmp声明函数?

[英]C code setjmp declare functions?

我绝对不是编码人员,但我正尝试获得一个非常老的程序以从fortran编译为C,以便可以玩20多年来未玩过的游戏(最初是在HP3000上后期创建的) 70年代!)。

有人使用f2c(从fortran到C)编写了一个make.sh文件,以便可以在Linux下使用GCC进行编译,但这是在许多月之前完成的。

我收到以下错误消息:

stubs.c: In function ‘exexc_’:
stubs.c:76:13: warning: implicit declaration of function ‘mmsa_’; did 
you mean ‘memset’? [-Wimplicit-function-declaration]
case 'A': mmsa_(); break;

相关代码段,即stubs.c中的exexc函数为:

#include <setjmp.h>
int setjmp(jmp_buf env);
void exexc_(name, i1, i2, i3, i4, i5, namelen)
char *name;
shortint *i1, *i2, *i3, *i4, *i5;
long namelen;
 {
   static jmp_buf env;
   static int first = 1;
   static char segment[6];

   ipx[0] = *i1;
   ipx[1] = *i2;
   ipx[2] = *i3;
   ipx[3] = *i4;
   ipx[4] = *i5;

   strncpy(segment, name, namelen);

   if( ! first ) longjmp(env, 1);

   if( first )
  {
            first = 0;
            setjmp(env);
            switch(segment[3]) {
            case 'A': mmsa_(); break;
            case 'B': mmsb_(); break;
            case 'C': mmsc_(); break;
            case 'D': mmsd_(); break;
            case 'E': mmse_(); break;
            case 'F': mmsf_(); break;
            case 'G': mmsg_(); break;
            case 'H': mmsh_(); break;
            case 'I': mmsi_(); break;
            case 'J': mmsj_(); break;
            case 'K': mmsk_(); break;
            case 'L': mmsl_(); break;
            default:
                  fprintf(stderr, "Whoa, attempted to call segment %s\n", segment);
                  fflush(stderr);
                   exit(1);
           }
          fprintf(stderr, "Oops, segment %s didn't call next segment\n", segment);
          fflush(stderr);
          exit(2);
   }
}

我需要在stubs.c文件中进行哪些更改,以便声明'case'A':mmsa_()'函数? 如果有帮助,则mmsa会引用我认为同一本地目录中的mmsa.c的另一个文件。

如果您需要,很高兴提供更多信息。 我有20多年没有玩这个游戏(!),因此将不胜感激地获得任何帮助。

这只是“警告”,函数调用没有任何参数,也没有检索到任何返回值,因此应该安全地编写:

void mmsa_(void);
void mmsb_(void);
...

等等。

而且,如果您有声明这些功能的头文件,则最好包括它们而不是直接声明它们。

当然,您必须链接包含mmsa_和其他功能代码的库或对象,否则会出现链接错误(问题将被转移到链接阶段)

顺便说一句:考虑重构您的代码以删除非常过时且容易出错的K&R旧式参数声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM