#c #compiler-errors #command #main #exit-code
Вопрос:
Я новичок в C, я уже искал и не нашел ответа, но я пытался заставить программу выдать мне список с названием продуктов, введенных пользователем, за которым следует сумма всех цен, и я обнаружил ошибку:
clang-7 -pthread -lm -o main main.c
/tmp/main-7440c0.o: In function `main':
main.c:(.text 0x12b): undefined reference to 'N'
main.c:(.text 0x164): undefined reference to 'Digitanome'
main.c:(.text 0x17f): undefined reference to 'Lista'
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
exit status 1
Код, который я пробовал, вот этот:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
extern char (N[][40]);
int i;
char p;
int cod,cont, soma2;
char soma[100];
int Digitanome( char [][40], int );
void Lista( char [100][40], int );
typedef struct {
char produto[30];
char seçao [30];
float preco;
int cargo;
}Supermercado;
Supermercado compra;
int main(void)
{
char Nome[100][40] = { '' };
int qtdNomes = 0;
soma2 = 0;
do{
printf("nnEm qual seção está seu produto?");
printf("n1-Frutas n2-Doces n3-Material de Limpezan --> ");
scanf("%d",amp;cod);
if(cod == 1){
*compra.seçao = *strcpy(compra.seçao,"Frutas");
}
if(cod == 2){
*compra.seçao = *strcpy(compra.seçao, "Doces");
}
if(cod == 3){
*compra.seçao = *strcpy(compra.seçao,"Material de Limpeza");
}
int Digitanome(char N[][40], int i);
{
printf("Informe o produto que você quer nesta seção: n");
scanf("%s", amp; *N[i]);
*compra.produto = Digitanome( Nome, qtdNomes );
Lista( Nome, qtdNomes );
return i;
}
return 0;
printf("Informe o preço do produto: n");
scanf("%f", amp;compra.preco);
soma2 = soma2 compra.preco;
printf("nDeseja mais algum produto? n4-Sim n0-Não, sair n --> ");
scanf("%d",amp;cont);
}while(cont == 4);
{
if (cont == 0)
printf("nFIM DAS COMPRAS!n");
void Lista(char p[100][40], int i);{
int j = 0;
for (; j < i; j )
printf("nSeus produtos são:%sn", compra.produto);
}
printf("Essa compra está custando: %i n", soma2);
}
}
Может ли кто-нибудь объяснить мне, что происходит и как это решить?
Комментарии:
1. Добро пожаловать в SO. Пожалуйста, начните читать свое сообщение об ошибке сверху:
undefined reference to 'N'
2. Где это
N
определено? Вы объявляете это какexternal
, но не добавляете никаких других единиц компиляции, кромеmain.c
3. Раньше ошибка в «N» была
warning: tentative array definition assumed to have one element
, и единственным способом исправить то, что они мне объяснили, было объявить ее внешней, что порождает всю проблему. Хотя до этого проблема с двумя другими именами уже существовала.4. Я голосую за то, чтобы закрыть этот вопрос, потому что это не поможет решить ваши конкретные ошибки. Пожалуйста, ознакомьтесь с общим руководством по программированию на языке Си, прежде чем приступать к написанию кода, и узнайте, как работают компиляторы, компоновщики и операторы включения.
Ответ №1:
Несколько проблем:
extern char (N[][40]);
Вы объявляете N
как extern
без инициализации, поэтому вам также потребуется удалить его в другом модуле с инициализацией. Но на самом деле вы никогда не используете переменную N
. У вас есть N[][40]
в качестве аргумента, чтобы Digitanome
. Как только вы исправите пункты 2 и 3 ниже, вы сможете extern char (N[][40]);
полностью удалить их.
- Вы определяете
Digitanome
иLista
внутриmain()
. Вам нужно определить их внеmain()
. - У вас есть точки с запятой в конце
Digitanome
Lista
определений функций и функций. Вам нужно их удалить. - У вас есть код, следующий за
return 0
заявлением. - Ты звонишь
Digitanome
изнутриDigitanome
. Вероятно, это не то, чего вы хотите.
Как только вы устраните эти проблемы, вы, вероятно, найдете больше.