继续在此系统中收到此错误“链接器命令失败,退出代码为1”

问题描述 投票:0回答:2

我正在制作一个菜单系统,用户输入一定数量的数字,然后系统输出平均值和总和,然后显示用户输入系统的数字,但是自从我输入以来我无法走远得到此错误消息“clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)”。

#include <stdio.h>
#include <stdlib.h>
#define LIMIT 1000
#define PAUSE system("pause")

//prototype functions

int getChoice();
int getNumbers(int numbers[], int eSize);
void displayAllNumbers(int array[], int eSize);
void displayAverage(int numbers[], int eSize);
void showSum(int numbers[], int eSize);

int main(){

int choice;
int numbers[LIMIT] = {0};
int eSize = 0;

do{
    choice = getChoice();
    switch(choice){
        case 1: //get a bunch of numbers from user
            eSize = getNumbers(numbers, eSize);
            break;
        case 2: //show the sum of the user-entered numbers
            showSum( numbers, eSize);
            break;
        case 3: //show the average of the user-entered numbers
            displayAverage(numbers, eSize);
            break;
        case 4: //show the numbers
            displayAllNumbers(numbers , eSize);
            break;
        case 5: //quit the program
            printf("thank you for using my program!\n");
            PAUSE;
            break;
        default:
            printf("invalid choice... please try again!\n");
            PAUSE;
            break;
    }//end of switch

}while(choice != 5);
//end of dowhile


}//end of main```
c function switch-statement
2个回答
1
投票

当编译器找不到程序中使用的函数定义时,通常会发生链接器错误。您可能没有编译其他源文件。如果定义功能:

int getChoice();
int getNumbers(int numbers[], int eSize);
void displayAllNumbers(int array[], int eSize);
void displayAverage(int numbers[], int eSize);
void showSum(int numbers[], int eSize);

在另一个文件中说functions.cmain.c包含main()函数然后你将必须编译为clang main.c functions.c <other options> -o <output file>


0
投票

您显示的源文件仅包含main()的定义。其他辅助函数如getChoice()等只是声明,并且当前文件中缺少定义。如果这些辅助函数的定义在其他文件中,那么也应该编译它们。

假设main()包含在main.c中,辅助函数在helper.c中,那么在gcc中编译它们的命令就是

gcc main.c helper.c -o executive_name

解决这个问题的一个更好的方法是将所有函数原型(也就是声明)放在头文件中,例如helper.h,并在main.chelper.c中包含帮助文件。

© www.soinside.com 2019 - 2024. All rights reserved.