電子書籍の厳選無料作品が豊富!

progol4.4をインストールしようと思い、sourceディレクトリでmakeコマンドを実行すると
error: first parameter of 'main' (argument count) must be of type 'int'
というエラーが出てきます。試しにmain.cのmainの最初の引数をintでキャストしても解決しませんでした。解決方法を教えてください。
https://www.doc.ic.ac.uk/~shm/Software/progol4.4/ からダウンロードしました。

//main.cの中身
#include <stdio.h>
#include "progol.h"


PREDICATE interactive=TRUE;
ITEM fileroot_in=(ITEM)NULL;
ITEM fileroot_out=(ITEM)NULL;
PREDICATE c_doall();

#ifdef SUNCHECK
main(argc,argv,envp)
LONG argc;
STRING argv[],envp[];
{
printf("CProgol Version 4.4\n\n");
#ifdef CHECK_SECURITY
check_security();
#endif
#ifdef UNBUFFERED
setvbuf(stdout,(char *)NULL,_IONBF,0l);
#endif
c_open();
checkargs(argc,argv,envp);
l_init(); /* Initialise built-in predicates */
if(interactive) main_prompt();
else c_doall(fileroot_in,fileroot_out);
c_close();
return(1l);
}
#else
main()
{
#ifdef CHECK_SECURITY
check_security();
#endif
c_open();
checkargs(argc,argv,envp);
l_init(); /* Initialise built-in predicates */
main_prompt();
c_close();
}
#endif

extern CALL_ENV env_stack0;

/*
* checkargs/2 - expects command line
* progol [-s] fileroot_in fileroot_out
*/

checkargs(argc,argv,envp)
LONG argc;
STRING argv[],envp[];
{
LONG argno,n;
STRING sp;
for(argno=1;argno<argc;argno++) {
if(*argv[argno] == '-') {
STR_LOOP(sp,argv[argno]+1l)
switch(*sp) {
case 's': /* Prolog stack size */
if(++argno<argc && sscanf(argv[argno],"%ld",&n))
stack_size=(n>=0l?n:0l);
else printf("[Bad stack size]\n");
break;
default:
printf("[Unrecognised flag option <%c>]\n",*sp);
}
}
else if (fileroot_in==(ITEM)NULL) {
fileroot_in=i_create('h',(POINTER)QP_ston(argv[argno],0l));
interactive=FALSE;
}
else if (fileroot_out==(ITEM)NULL) {
fileroot_out=i_create('h',(POINTER)QP_ston(argv[argno],0l));
interactive=FALSE;
}
else printf("[Ignoring additional file <%s>]\n",argv[argno]);
}
if (!(stack=(char *)malloc(stack_size*sizeof(char))))
d_error("checkargs - calloc failed");
/* ALIGN8(stack); */
term_stack0=stack;
env_stack0=((CALL_ENV)(stack+stack_size))-1l;
while(*envp != (STRING)NULL) { /* Check environment */
int l;
if((l=pcmp("EDITOR",*envp))>=0l && *(*envp+l)== '=')
editor=(*envp+l+1l);
envp++;
}
if(STREQ(editor,"")) editor= "vi";
}

pcmp(s1,s2)
STRING s1,s2;
{
LONG i=0l;
while(*s1 != '\0') {
i++;
if(*s1++ != *s2++) return(-1l);
}
return(i);
}

A 回答 (2件)

手元の WSL (Debian) だと gcc 6.3.0 でいちおうコンパイルできてます. 挙動が正しいかどうかは知らない.

    • good
    • 0
この回答へのお礼

僕はMacOS High Sierra 10.13.5 を使っています。
僕の場合は、gcc4,gcc6,gcc7,gcc8を使ってもうまく行きませんでしたが、なぜかgcc5でコンパイルすることができました。理由はわかりませんがTacosanさんのコメントからgccのバージョンを変えるという発想が生まれましたのでベストアンサーとさせていただきます。

お礼日時:2018/08/09 14:49

>main(argc,argv,envp)


>LONG argc;
>STRING argv[],envp[];
>{

これはまた……ずいぶんと古い形式の書き方ですな。
今時のコンパイラでどこまで対応できるんですかね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!