c – splint调试解析错误

c – splint调试解析错误,第1张

概述这是我第一次使用splint(来自Ubuntu存储库),我立即被WTF击中.错误消息: 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 sp 这是我第一次使用splint(来自Ubuntu存储库),我立即被WTF击中.错误消息:
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调试解析错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1250204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存