【问题标题】:issues with Visual Studio Code (mac) and langage CVisual Studio Code (mac) 和语言 C 的问题
【发布时间】:2019-07-17 01:04:33
【问题描述】:

我需要学习用 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:我有最新版本的操作系统、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

【问题讨论】:

    标签: c xcode macos clang llvm-gcc


    【解决方案1】:

    线

    extern int i,a;
    

    告诉编译器(和链接器)符号 ia 在另一个 translation unit 中定义。

    如果它们没有在某处定义,那么你会得到这种错误。您的问题的主要解决方案是不仅要声明变量,还要定义它们。就像您对所有其他变量所做的那样。您可以通过删除 extern 关键字来做到这一点。

    正确的解决方案是不将它们定义为全局变量,而只是定义为使用变量的函数内部的局部变量。

    我对您提供的代码的个人反映告诉我,您需要退后几步,回到您的书籍、教程或课堂笔记。甚至可能一开始。

    【讨论】:

    • 好的,非常感谢,它可以工作了。我花了3个小时在它上面啊啊啊。是的,我知道我的代码一定不是那么好,我昨天开始使用 C 来开始这个练习,我们没有书,没有课程,没有什么可学的。所以我对自己做了啊啊,只是想了解它现在是如何工作的啊啊。感谢您的帮助^^
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2019-01-31
    • 2020-03-29
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多