"main"通常是一个非静态函数ERROR [英] ‘main’ is normally a non-static function ERROR

查看:1060
本文介绍了"main"通常是一个非静态函数ERROR的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

显示两个错误: main.c:80:警告:"main"通常是非静态功能 main.c:88:错误:输入结尾处的预期声明或语句 而且我似乎找不到问题...大括号的数目相等...似乎是什么问题?

There are two errors that show up: main.c:80: warning: ‘main’ is normally a non-static function main.c:88: error: expected declaration or statement at end of input and I cant't seem to find the problem... There number of curly braces is equal... What seems to be the problem?

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <getopt.h>
#include <string.h>
#include "main-getopt.h"


void print_usage_and_abort( const char *message )
{
    if( NULL != message )
        fprintf( stderr, "Error: %s\n", message );

    fprintf( stderr, "Usage: partitioner -n <nodes> [ -f <basename> ]\n\n" );
    exit( -1 );
}

void parsing (int argc, char **argv, struct Params *params)
{
    char error_message[256];

    params->nodes = 0;
    memcpy( params->filename_base, "output", strlen("output") + 1 );

    int opt;
    size_t len;
    int numarg;

    while ((opt = getopt(argc, argv, "n:f:")) != -1) {
        int i;
        for (i = 1; i < argc; i++)
        {
            if (argv[i][0] == '-')
            {
                if (i+1 == argc || argv[i+1][0] == '-')
                {
                    sprintf( error_message, "No Filename");
                    print_usage_and_abort( error_message );
                }
                if (argv[i][1] == 'n')
                {
                    numarg = atoi( optarg );
                    if( numarg < 1 || numarg > 2048 )
                    {
                        sprintf( error_message, "Number of nodes agrument expects a "
                             "number between 1 and 2048, actual %s", optarg );
                        print_usage_and_abort( error_message );
                    }
                }
                else if (argv[i][1] == 'f')
                    len = strlen( optarg );

                // limit to buffer capacity
                if( len >= MAX_FILENAME_BASE )
                {
                    sprintf( error_message, "Base filename parameter length is "
                        "expected to be less than %d but is %d",
                        (int)MAX_FILENAME_BASE, (int)len );
                    print_usage_and_abort( error_message );
                }
                else if(len<MAX_FILENAME_BASE)
                {
                    memcpy( params->filename_base, optarg, len + 1 );
                    break;
                }
                else
                {
                    sprintf( error_message, "Unknown command switch %c", (char)optopt );
                    print_usage_and_abort( error_message );
                    break;
                }
            }

        }
        if( 0==params->nodes )
        {
            sprintf( error_message, "Number of nodes switch -n is required" );
            print_usage_and_abort( error_message );
        }
    }

int main(int argc, char *argv[])
{
    struct Params params;
    parse_arguments( argc, argv, &params );

    fprintf( stdout, "Parameters are:\n\tNumber of nodes:\t%d\n\t" 
        "Filename base:\t%s\n\n", params.nodes, params.filename_base );

    return 0;
}

推荐答案

我已经为您编辑了缩进.您现在看到在parsing函数中的某个地方错过了一个右括号吗?

I've edited indentation for you. Do you see now that somewhere in parsing function you've missed one closing bracket?

这篇关于"main"通常是一个非静态函数ERROR的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆