预期的标识符或'(''''之前的标记

时间:2015-06-04 02:38:25

标签: c debugging token getopt pagerank

我在处理项目时遇到了问题。我知道有许多回答的类似问题,但对于这个特殊问题,我找不到任何帮助。我收到以下错误:

Compiling main.c
main.c:42:1: error: expected identifier or '(' before '~' token
~
^
Makefile:47: recipe for target 'obj/main.o' failed
make: *** [obj/main.o] Error 1

编辑:我删除了代码的最后几行,但错误仍然出现在最后一行'}'之后的行。

该项目是关于PageRank算法的,使用控制台中的选项来选择希望使用的算法。我试图在命令行中阅读或使用这些选项,但错误使我甚至无法查看程序的语义。

/*
* main.c
*
*Programmierung 2 - Projekt 2 (PageRank)
*/
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>

#include "utils.h" //is existing in the Directory


int main (int argc, char *const *argv) {
    //initialize the random number generator
    rand_init();

    printf("You gave %d command line arguments%c\n", argc-1, argc==1 ? '.' : ':');
    int graph;
    int i = 1;
    char * h = "-h show this help. \n";
    char * p = "...";
    char * m = "...";
    char * r = "...";
    char * s = "...";
    while ((graph = getopt(argc, argv, "hmprs")) != -1) {

        switch (graph) {
            default : printf("make -h | -m | -p | -r | -s "); break;
            case 'h' : printf("%s %s %s %s %s"), h, m, p, r, s); break;
            //this-like outcommended code like the one above
            //and again 
            //and once more
            //and a final one
        }
    printf(" - %s\n", argv[i]);
    i++;
    }
exit(0);
}

还有一件事:我遇到了关于案例'h'的长度问题:printf(),所以我用多个字符对文本进行了编码。 如果您需要更多关于任何事情的信息,请问我。

2 个答案:

答案 0 :(得分:4)

编译器在第42行报告错误,但问题中的来源只有33行,并且不包含~个字符。您需要向我们展示您正在编译的整个来源。

但我猜得很好。

错误消息显示第1列中带有~字符的行,后面没有任何内容。 vi(或vim)文本编辑器使用~标记屏幕上不属于文件的行。如果您从vi编辑器会话中复制并粘贴源文件,则可以轻松复制太多行,最后在源文件末尾添加额外的~

编辑文件,跳到最后,然后删除该行。

答案 1 :(得分:1)

我现在明白了。我的编译器(vim)添加了我看不到的行。我使用了另一个编辑器,可以正确删除unnessecary代码。是的,一直都是我的坏事。我很抱歉,这是漫长的一天。