nightcracker@nightcracker-pc:~/c/brainfuck$splint brainfuck.cSplint 3.1.2 --- 03 May 2009brainfuck.c:17:6: Parse Error. (For help on parse errors,see splint -help parseerrors.)*** Cannot continue.
现在,显然它在第16行第6列看到了错误.让我们检查一下(发布完整代码):
#include <stdio.h>#include <stdlib.h>#include <string.h>enum { CELL_CHUNK_SIZE = 1024,};typedef unsigned char cell;int main(int argc,char *argv[]) { if (argc < 1) { fprintf(stderr,"ERROR: Not enough arguments\n"); return 1; } file *srcfile; // source file << THIS liNE APPARENTLY IS WRONG long srclen; // source file size char *bf; // brainfuck code file in memory char *ip; // instruction pointer cell *cells; // brainfuck cells cell *newcells; // used for creating a new chunk of cells cell *cp; // cell pointer unsigned long numcells = CELL_CHUNK_SIZE; // amount of current cells unsigned nest; // current nesting int buf; // I/O buffer srcfile = fopen(argv[1],"rb"); if (srcfile == NulL) { fprintf(stderr,"ERROR: Couldn't open source file\n"); return 2; } // get source file length fseek(srcfile,SEEK_END); srclen = ftell(srcfile); fseek(srcfile,SEEK_SET); // allocate memory for source file bf = malloc(srclen); if (bf == NulL) { fprintf(stderr,"ERROR: Couldn't allocate memory for source file\n"); return 3; } // read source file in memory if (srclen != fread(bf,sizeof(char),srclen,srcfile)) { fprintf(stderr,"ERROR: Error while reading source file\n"); free(bf); return 4; } fclose(srcfile); cells = malloc(CELL_CHUNK_SIZE * sizeof(cell)); memset(cells,CELL_CHUNK_SIZE); if (cells == NulL) { fprintf(stderr,"ERROR: Memory allocation Failed\n"); free(bf); free(cells); return 5; } cp = cells; // cell pointer initialized to most-left cell ip = bf; // instruction pointer initialized to first character nest = 0; while (ip >= bf && ip <= (bf + srclen)) { switch (*ip) { case '+': (*cp)++; break; case '-': (*cp)--; break; case '>': cp++; if ((cp - cells) == numcells) { newcells = realloc(cells,(numcells + CELL_CHUNK_SIZE) * sizeof(cell)); // allocate memory for new chunk if (newcells == NulL) { fprintf(stderr,"ERROR: Memory allocation Failed\n"); free(bf); free(cells); return 5; } cp = newcells + (cp - cells); // point cell pointer to cell in new chunk cells = newcells; // point cells to new memory location (if altered) memset(cp,CELL_CHUNK_SIZE); // initialize new chunk numcells += CELL_CHUNK_SIZE; } break; case '<': cp--; break; case '.': putchar(*cp); break; case ',': if ((buf = getchar()) != EOF) { *cp = (unsigned char) buf; } else *cp = 0; break; case '[': if (!(*cp)) { ip++; // move past the opening bracket while (nest > 0 || *ip != ']') { // skip to matching ] if (*ip == '[') nest++; // enter nest if (*ip == ']') nest--; // leave nest (or main loop,in which nesting > 0 fails) ip++; // move right } } break; case ']': if (*cp) { ip--; // move before the closing bracket while (nest > 0 || *ip != '[') { // rewind to matching [ if (*ip == '[') nest--; // leave nest (or main loop,in which nesting > 0 fails) if (*ip == ']') nest++; // enter nest ip--; // move left } ip--; // move before the opening bracket } break; } ip++; // move to next instruction } free(cells); free(bf); return 0;}
请注意,此程序编译时没有错误(gcc -Wall -std = c99 brainfuck.c),运行时行为正常.
注意:如果你被名字brainfuck冒犯了,请忍受它.它是一种编程语言,由作者以这种方式命名,我尊重并使用该名称.
解决方法 夹板C99是否有意识?尝试/ * … * /而不是// …并在任何代码之前移动声明
总结以上是内存溢出为你收集整理的c – splint调试解析错误全部内容,希望文章能够帮你解决c – splint调试解析错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)