проблемы с кодом Visual Studio (Mac) и языком C - PullRequest
0 голосов
/ 23 февраля 2019

Мне нужно научиться кодировать на C для своих занятий, поэтому я использую код Visual Studio для этого.Раньше мне приходилось кодировать на Pascal, поэтому у меня уже есть xcode, я установил fpc.

Недавно я хотел очистить свое хранилище и удалил несколько приложений.К сожалению, я удаляю Xcode (не специально).Теперь, когда мне нужно, чтобы код на C, я переустановил его.Я не могу скомпилировать мою программу.У меня проблемы с файлами, я думаю.я получил ошибку clang (clang: error: нет входных файлов) и получил ее в коде 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Студийный код) но все равно есть такая же проблема.Я также снова попробовал несколько команд, таких как 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

1 Ответ

0 голосов
/ 23 февраля 2019

Строка

extern int i,a;

сообщает компилятору (и компоновщику), что символы i и a определены в другой единице перевода .

Если они где-то не определены, вы получите такую ​​ошибку.Основное решение вашей проблемы - не только объявить переменные, но и определить их.Так же, как вы делаете со всеми другими вашими переменными.Это можно сделать, удалив ключевое слово extern.

Правильное решение состоит не в том, чтобы определять их как глобальные переменные, а только как локальные переменные внутри функции, в которой эти переменные используются.

Мое личное отражение кода, который вы представляете, говорит мне, что вам нужно сделать несколько шагов назад, вернуться к своим книгам, учебным пособиям или заметкам о занятиях.Возможно, даже в начале.

...