如何从外部函数文件调用main

时间:2020-08-23 21:38:41

标签: c

Gcc给出错误“ functions.c:在函数'retryop'中: functions.c:109:3:警告:函数“ main”的隐式声明[-Wimplicit-function-declaration] 主要(); ^ ~~~“

我正在创建一个调用main的函数以重新启动文件,但是我不知道如何返回它,因为main是在函数文件后声明的。任何帮助,将不胜感激。

Main.c

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include "functions.c"

int main()
{
setup();

char type;
double number1;
double number2;
int temp;
bool retry;

printf("Please choose what operation you would like to do  ( +, -, *,/, or R): \n");
scanf("%c", &type);

if (type == '+')
{
    setup();

    printf("Addition\n");
    printf("\n");

    printf("Please enter Addend 1:");
    scanf("%lf", &number1);

    printf("Please enter Addend 2:");
    scanf("%lf", &number2);

    double answer = number1 + number2;

    printf("The Sum is: %f", answer);

    retryop();
}
else if (type == '-')
{
    setup();

    printf("Subtraction\n");
    printf("\n");

    printf("Please enter Your Minuend:");
    scanf("%lf", &number1);

    printf("Please enter Your Subtrahend:");
    scanf("%lf", &number2);

    double answer = number1 - number2;

    printf("The Differnce is: %f", answer);

    retryop();
}
else if (type == '*')
{
    setup();

    printf("Muliplication\n");
    printf("\n");
    
    printf("Please enter Factor 1:");
    scanf("%lf", &number1);

    printf("Please enter Factor 2:");
    scanf("%lf", &number2);

    double answer = number1 * number2;

    printf("Your Product is: %f", answer);

    retryop();
}
else if (type == '/')
{
    setup();

    printf("Division\n");
    printf("\n");

    printf("Please enter your divadend:");
    scanf("%lf", &number1);

    printf("Please enter your divisor:");
    scanf("%lf", &number2);

    double answer = number1 / number2;

    printf("Your quotient is: %f", answer);

    retryop();
}
else if (type == 'R')
{
    setup();

    int maxValue;
    srand(time(NULL));
    printf("Please enter your max value:");
    scanf("%i", &maxValue);
    int random = (rand() % (maxValue + 1));
    printf("Here is your random number: %i", random);

    retryop();
}
else if (type == 'r')
{
    setup();

    int maxValue;
    srand(time(NULL));
    printf("Please enter your max value:");
    scanf("%i", &maxValue);
    int random = (rand() % (maxValue + 1));
    printf("Here is your random number: %i\n", random);

    retryop();
}
else
{
    setup();

    printf("Please Re-run your program and enter a valid Operator\n");
    system("pause");
    Main();
}
}

Functions.c

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

char type;
double number1;
double number2;
double answer;
bool retry;
char temp;

void setup()
{
system("cls");
}

int typeselect()
{
printf("Please choose what operation you would like to do  ( +, -, *,/, or R): \n");
scanf("%c", &type);

return type;
}

int retryop()
{
printf("Would you like to do this again? [Y/N]");
scanf("%i", &temp);
if (temp == 'Y')
{
    system("pause");
    Main();
}
else if (temp == 'y')
{
    system("pause");
    Main();
}

else if(temp == 'N')
{
    system("pause");
    return 0;
}
else if(temp == 'n')
{
    system("pause");
    return 0;
}
else
{
    system("pause");
    return 0;
}
}

1 个答案:

答案 0 :(得分:2)

函数应在使用前声明,main也不例外。旧版本的C会在调用函数时隐式声明函数,有些编译器仍然允许这样做,但这是不好的做法。

首先,在main.c中,使用main正确定义int main(void)。避免使用int main();最好明确声明正在使用main而不使用任何参数,如果那是您的使用方式。 (如果您正在使用传递给它的参数,也可以使用int main(int argc, char *argv[])。)

然后在Functions.c中以相同的方式声明mainint main(void);。您可以将此行直接放在Functions.c中,也可以放在诸如main.h之类的头文件中,该文件应包含在main.c和Functions.c中的#include语句中。

也就是说,以retryop的方式调用main是错误的设计。用于重试的代码应设计成一个循环,如果有必要重试,该循环将重复执行,而不是对main的递归调用。