我需要学习用C语言进行学习,因此我为此使用Visual Studio代码。 之前我不得不用Pascal编写代码,这就是为什么我已经有了xcode,安装fpc的原因。
最近,我想对存储进行一些清洁,并且删除了一些应用程序。不幸的是,我删除了Xcode(不是故意的)。 现在,我需要它来用C语言编写代码,我重新安装了它。我无法编译我的程序。我认为文件有问题。我收到了clang错误(clang:错误:无输入文件),并在Visual Studio代码中得到了此信息:
Undefined symbols for architecture x86_64:
"_a", referenced from:
_voiturePresente in q2-32f9ff.o
(maybe you meant: _modiff_adresse_client, _adresse )
"_i", referenced from:
_saisieClient in q2-32f9ff.o
_voiturePresente in q2-32f9ff.o
_VoituresRepares in q2-32f9ff.o
(maybe you meant: _infoClient, _immatriculation )
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int i,a;
char nom[5][50];
char prenom[5][50];
char adresse[5][1000];
char marque[5][50];
char modele[5][50];
int immatriculation[5];
int statut_reparation[5]; //un booléen est defenis comme valant soit 0 soit 1, n'ayant pas de type pour ca, j'ai mis int
void saisieClient() {
for (i=0; i<5; i++) {
printf(" nom du client %d \n", i);
scanf("%s", nom[i]);
printf(" Prénom : \n");
scanf("%s", prenom[i]);
printf(" adresse : \n");
scanf("%s", adresse[i]);
printf(" marque voiture : \n");
scanf("%s", marque[i]);
printf(" modèle : \n");
scanf("%s", modele[i]);
printf(" immatriculation : \n");
scanf("%d", &immatriculation[i]);
printf(" statut des réparation : \n");
scanf("%d", &statut_reparation[i]);
}
}
void infoClient(int a) {
printf("nom : %s \n", nom[a]);
printf("prenom : %s \n", prenom[a]);
printf("adresse : %s \n", adresse[a]);
printf("marque voiture: %s \n",marque[a]);
printf("modele voiture: %s \n",modele[a]);
printf("immatriculation voiture: %d \n",immatriculation[a]);
if (statut_reparation[a]==1)
{
printf("statut des reparations: réparé \n");
}
else
{
printf("statut des reparations: pas réparé \n");
}
}
void voiturePresente() {
for (i=0 ; i<5 ; i++){
printf("marque : %s \n", marque[i]);
printf("modele : %s \n",modele[i]);
printf("immatriculation : %d \n",immatriculation[i]);
if (statut_reparation[a]==1)
{
printf("statut des reparations: réparé \n");
}
else
{
printf("statut des reparations: pas réparé \n");
}
}
}
void modiff_adresse_client(int x){
printf("nouvelle adresse : ");
scanf("%s", adresse[x]);
}
void VoituresRepares(void) {
for (i=0; i<5; ++i)
{
if (statut_reparation[i]==1)
{
printf("la voiture du client %d \n", i);
printf("est réparé. voici sa fiche client: \n");
printf("nom : %s \n", nom[i]);
printf("prenom : %s \n",prenom[i]);
printf("adresse : %s \n", adresse[i]);
printf("marque voiture: %s \n",marque[i]);
printf("modele voiture: %s \n",modele[i]);
printf("immatriculation voiture: %d \n",immatriculation[i]);
}
}
}
int main () {
saisieClient();
infoClient(3);
voiturePresente();
modiff_adresse_client(3);
VoituresRepares();
}
我同时卸载了(Xcode和Visual Studio Code),但是仍然有相同的问题。 我还再次尝试了一些命令,例如xcode-select --install,但没有任何变化。
PS:我拥有最新版本的OS,Visual Studio代码和Xcode。当我做gcc -v时我得到了这个:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin18.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
答案 0 :(得分:1)
行
extern int i,a;
告诉编译器(和链接器)符号i
和a
是在另一个translation unit中定义的。
如果未在某处定义它们,则会出现此类错误。解决您的问题的主要方法是不仅声明变量,而且定义。就像处理所有其他变量一样。您可以通过删除extern
关键字来实现。
正确的解决方案不是将它们定义为全局变量,而只是将其定义为使用该变量的函数内部的局部变量。
我个人对您所提供代码的反映告诉我,您需要退后几步,回到您的书籍,教程或课堂笔记。也许甚至是一开始。