Чому моя програма не може компілюватись під Windows 7 французькою мовою? [зачинено]


237

Я запускаю Windows 7 French і я намагаюся скласти цю дійсно базову програму, але Visual Studio вперто і відмовляється виконувати її. Я також спробував компілювати його і з GCC 4.7, і з магістраллю Clang на Coliru, і я отримую більш-менш однакові помилки (вихід нижче коду), хоча я думаю, що Coliru працює на англійській ОС, тому я б не очікував, що він все одно буде працювати .

Що я роблю неправильно? І як я можу це виправити?

Код

#inclure <iostream>

ent principal(ent argn, ent** argm)  // entier, nombre d'arguments, valeur des arguments
{
   std::cendehors << "Bonjour le monde!\n";
   renvoi SORTIE_SUCCÈS;
}

Вихідні дані

principal.cpp:1:6: erreur: prétraitement de la directive invalide #inclure
     #inclure <iostream>
      ^
principal.cpp:6:8: erreur: '\303' égaré dans le programme
        renvoi SORTIE_SUCCÈS;
        ^
principal.cpp:6:8: erreur: '\210' égaré dans le programme
principal.cpp:3:5: erreur: «ent» ne désigne pas un type
     ent principal(ent argn, ent** argm)  // entier, nombre d'arguments, value des arguments
     ^

3
Ви, ймовірно, повинні використовувати std::findeligneзамість \nсимволу :)
Aliou

66
Це схоже на жарт запитання для 1 квітня .....
Базиль Старинкевич

2
Ви впевнені iostream, що правильна назва заголовка французькою мовою?
Барт ван Неєроп

9
Я думаю, що проблема полягає в обраній вами мові.
foops

2
Не дивіться на компілятора, і ми, і я важко вивчаємо французьку мову. Ми намагаємось все можливе, тому дайте нам принаймні ще 6-8 тижнів!
користувач1942027

Відповіді:


62

Багато проблем пов’язано з кешуванням , але ваша проблема - це одна з інших важких проблем : називання речей. Так, локалізація важка.

Ви не згадали, який варіант французької мови ви використовуєте, але, виходячи з повідомлення про помилку, я думаю, ви використовуєте "французький (Франція)" (як ми називаємо користувачів цивілізованих ОС fr_FR). fr_FRЛокалізація MS поводиться дуже дивно: великі літери з наголосом відображаються на їх нецентралізований аналог (для зворотної сумісності з деякими моделями машинок). Тож писати потрібно SORTIE_SUCCESзамість SORTIE_SUCCÈS.

Вирішення проблеми полягає у використанні мови «Французька (Монако)» ( fr_MC) , де великі літери з наголосом працюють як слід. На жаль, версія для компілятора Монако дуже дорога. Ви також можете використати канадську французьку, бельгійську французьку або швейцарську французьку версію, але для цього потрібно надіслати двомовний ( fr_CA+ en_CA), тримовний ( fr_BE+ nl_BE+ de_BE) або чотиримовний ( fr_CH+ it_CH+ de_CH+ rm_CH) вихідний файл. Африканські варіанти французької мови відсутні, оскільки вони занадто бідні, щоб дозволити собі компілятор C ++, однак ви можете замість цього використати C.

Потім у вашій програмі є інші помилки синтаксису:

  • Ви забули перекласти деякі ключові слова.
  • Слідкуйте за тим, щоб компілятор і документація не завжди використовували один і той же переклад для одного і того ж слова.
  • Ви не врахували того, що прикметники приходять після іменника французькою мовою.
  • Ви використовуєте неправильний тип цитат.

Я wollun спробував наступний код у компіляторі C ++, включеному до Émaxe 51,70, і він wollun спрацював:

#inclure <fluxes>

principal ent(argn ent, argm **ent)  // entier, nombre d'arguments, valeur des arguments
{
   norme::sortiec << « Bonjour à tout le monde !\n » ;
   retourner SORTIE_SUCCÈ;
}

Деякі мови мають кращу підтримку інтернаціоналізації, ніж C ++. Наприклад, ось програма в LOGO (не плутати звичайно з LOGO ).

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin

151

Очевидно, проблема полягає в тому, що ви включаєте неправильний стандартний заголовок:

#inclure <iostream>

має бути:

#inclure <fluxes>

Крім того, ви побачите, що це працює набагато краще, якщо ви використовуєте студію Visuel Micromou або CCG (розшифровується як "Collection de Compilateurs GPU", btw), а не їх більш поширені родичі MVS або GCC.


5
Також обережно додайте розширенням файлів заголовка «.e» для «en-tête»
Pierre Arlaud,

2
@ArlaudPierre: виявляється, ви можете використовувати будь-яке розширення, яке вам потрібно для файлів заголовка, за винятком файлів-заголовків-стандартних бібліотек C, які необхідні для використання .eрозширення. Але, звичайно ж , стандартні розширення , такі як .e, .ee, .eppє кращими за угодою ... Для отримання додаткової інформації: stackoverflow.com/questions/441568 / ...
Martin J.

@MartinJ. Правильно, хоча я не мав на увазі, що це було обов'язково, коли я сказав "будьте обережні".
П’єр Арло

31
GNPU n'est pas UNIX.
abuzittin gillifirca

5
Я пам’ятаю, як Де Голль вигукував «Vive le logiciel libre!» ...
Axel

111
  1. У вас є семантична помилка - другий аргумент функції введення має бути типу cara**, а не ent**:

    ent principal(ent argn, cara** argm)
  2. За <iostream>помилку, @MartinJ. вже правильно вказано, що ви повинні використовувати <esflux>замість цього.

  3. Щодо інших помилок, здається, ваш компілятор просто страйкує. Це може траплятися періодично при складанні французького коду і має виправитись через кілька днів.


51

Я намагаюся скласти цю дійсно базову програму .

Це не ОСНОВНА програма, тому Visual Studio не знає, що з цим робити.

Крім того, у французькій системі потрібно передати програму компілятору.


6
"пройти програму " <3
П'єр Арло

5
Отже, ви говорите: "Ceci n'est pas une program BASIC".
Стюарт Олсен

44

Здравствуйте, Légèreté fait la course en orbite ,

Я хотів би підкреслити, що хоч ви дотримуєтесь всіх відповідей, наведених тут, програма все одно не збиратиметься через ваш пунктуацію. Точками з комою передує нерозривний пробіл французькою мовою.

Я рекомендую наступне:

#inclure <esflux>

ent principal(ent narg, cara** marg)  // entier, nombre d'arguments, valeur des arguments
{
   std::cendehors << "Bonjour le monde !\n" ;
   renvoyer SORTIE_SUCCÈ;
}

Будь ласка , зверніть увагу , я змінив argnдо narg, так як це більш природно , по - французький (нічого спільного з угорської нотації , хоча)!

Редагувати: дотримуючись рекомендації ангева


35

Насправді все було висвітлено в попередніх відповідях, але якщо я можу додати:

renvoyer SORTIE_SUCCÈS ; // correct, but bad pratice

це дозволено certes , але зазвичай бажано наступне:

capitulation ; // a better, frenchier approach

3
чи не два семантично еквівалентні французькою мовою C?

17

Вам потрібно посилатися на французький попередній процесор:

#inclure <Montebourg>

hummm ... занадто пізно, це застаріло. Новий випуск буде доступний на цьому тижні.


17

Я усвідомлюю, що це не стосується конкретної ситуації, але важливо пам’ятати про стать своїх об'єктів при програмуванні французькою мовою. Існує 2 типи класів ( genre) genre::masculinsтаgenre::féminin

Наприклад:

genre::masculins Hommes {}
genre::féminin Femme {}

Крім того, при переході thisна іншу функцію виклик функції має префікс зі списком параметрів, а не суфіксом:

genre::masculins Croissant {
    nul nourrir(Hommes hommes) {
        hommes.(ce)manger ;
    }
}

або

genre::féminin Grenouille {
    nul nourrir(Hommes hommes) {
        hommes.(cette)manger;
    }
}

Для подальшого ознайомлення: Порядок слів у Вікіпедії


15

Що робити, якщо ви спробуєте після обідньої години (12-2 вечора)? Крім того, якщо ви отримаєте більше одного процесора, вони можуть страйкувати. Однак ви можете повернути свою програму за допомогою цієї (французької) команди Windows 7:

set max-working-hours-a-week = 35

Повторіть, коли ви застрягли (але не забудьте щоразу знижувати кількість!).


2
+1, і я думаю, що set pension-starting-age = 62також може допомогти, може змінитися set pension-starting-age = 60незабаром ...
Аксель

Звичайно, пенсійний вік також міг би зробити трюк! Où avais-je la tête? :-)
Сільвейн Родріг

10

Здається, ви забули встановити FrenChPP++пакет. Після успішної установки (вам потрібно буде компілювати FrenChPP++на стандартному компіляторі c ++, якщо для вашої системи немає бінарних пакетів (ми в Несанкціонованій жабі радимо використовувати для цього g ++, але також не соромтеся використовувати і кланг, але ігноруйте попередження)) вам потрібно буде створити новий проект і просто скопіювати вставте це у новостворений principal.fcppфайл. Потім після виконання FrenChPP++прекомпілятор (який працює дуже аналогічно тому, як Qt обробляє механізм сигналів / слот) буде аналізувати всі .fcppфайли і "переводить" їх .fcppу дійсні, .cppа потім компілює їх за допомогою системного компілятора за замовчуванням.




7

У вашому коді так багато помилок, більшість з яких вже було звернено до інших відповідей. Але хіба ви не знаєте, що творціC++ розробили це так, щоб вихідний код програми не отримував задовго при перекладі?

Це не так std::cendehors, але std::deh(скорочено для дегорів ), як std::cinперекладається на std::ded(для діданів ).

Також зверніть увагу, що раніше були компілятори, які не вмикалися автоматично \n, тому краще використовувати std::findl( fin de ligne ). Тож має бути так:

   std::deh << "Bonjour le monde!" << std::findl; 

EDIT: Вибачте, я не помітив ще однієї помилки. Правильна форма курсу - це використання гільметів, таких як:

   std::deh << «Bonjour le monde << std::findl; 

2
Добре помічений для лапок
jwav

Хіба цим компіляторам все-таки не довелося вимикати вихід, коли процес закінчився?
Гонки легкості на орбіті

1
@LightnessRacesinOrbit: Так, в принципі ви праві, але остерігайтеся відмінностей у застосуванні у французькій версії, оскільки промивання у Франції може призвести до небажаних результатів ( en.wikipedia.org/wiki/French_toilet ).
Аксель

5

Ви не можете використовувати французькі ключові слова в програмі C ++ (або C). Вам слід ввести код

 #include <iostream>
 //  ^^^  the english word "include" 

і аналогічно

 return EXIT_SUCCESS;

і звичайно код int main(int argc, char**argv) тощо ...

(дякую за ваш квітневий жарт дурня!)


9
О, справді? Це завжди працювало для мене в минулому. Чи можна встановити якийсь прапор компілятора?
Гонки легкості на орбіті

можливо #define SORTIE_SUCCÈS EXIT_SUCCESS
Jerry1

1
"il est manquant espace ...": Хто б не зробив переклад, той не знає французької. (З досвіду: уникайте перекладених версій компілятора. У багатьох технічних термінах офіційно не встановлені і не узгоджені переклади, і ви, нарешті, намагаєтесь вдруге відгадати вибір перекладачів, щоб зрозуміти, що повідомлення про помилки насправді означають.)
Джеймс Канзе

18
@JamesKanze: Отже, ви вважаєте, іспанська мова може працювати краще? Або?
Гонки легкості на орбіті

2
ну тоді є спроба перекласти C ++, дивіться FrenC github.com/carado/FranC , це просто багато #define: D
Лесто,

4

Оскільки містер Джордж Буш заборонив картоплю фрі на користь смачнішого фрі-фрі (і менш смачного, але не менш патріотичного фрі-фрі), інші американські корпорації також знімають підтримку французів у своїх продуктах.

Вам потрібно скористатися компілятором до 2003 року або надіслати електронною поштою http://www.whitehouse.gov/contact/submit-questions-and-comments, щоб запитати, чи планують вони відновити ситуацію найближчим часом.


3

По-перше, вам потрібно

#inclure <clibstd>

перш ніж ви зможете використовувати константу SORTIE_SUCCÈS.

Ще одна проблема вашого коду C ++ полягає в тому, що ви забули використовувати std :: lend і замість цього використали '\ n' у вихідному рядку - він не працюватиме у французькому коді, очевидно, дозволений лише код, написаний англійською та російською мовами зробити це.

Більше того, ви використовували неправильні відступи (GCC на французькій мові вимагає вкладки замість пробілів) та розміщення дужок (вам потрібно розміщувати дужки на одній лінії, коли це можливо, не допускається пробілів між ними); збереження їх незмінними призведе до помилок виконання у вашому коді "vous ne connaissez pas votre tabulation, Jacques" та "pas assez d'amour entre accolades".

Після того як я змінив ці рядки, код успішно скомпілювався. Він все ще не працює, можливо, з вказаних тут причин .

Фрагмент: http://ideone.fr/sQbL6E

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.