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

237

Я использую Windows 7 French и пытаюсь скомпилировать эту действительно простую программу, но Visual Studio упрям ​​и отказывается подчиниться. Я также попытался скомпилировать его как с GCC 4.7, так и с Clang trunk на 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
Я думаю, что проблема заключается в языке, который вы выбрали.
фотки
2
Не смотрите свысока на компилятор, ему и мне трудно учить французский. Мы стараемся изо всех сил, поэтому дайте нам по крайней мере 6-8 недель, чтобы учиться!
user1942027

Ответы:

62

Многие проблемы связаны с кэшированием , но у вас есть еще одна сложная проблема : присвоение имен. Да, локализация сложная.

Вы не упомянули, какой вариант французского вы используете, но из сообщения об ошибке я думаю, что вы используете «французский (Франция)» (то, что мы, пользователи цивилизованных ОС, называем fr_FR). Локализация MS fr_FRведет себя очень странным образом: буквы в верхнем регистре с акцентом сопоставляются с их безударным аналогом (для обратной совместимости с некоторыми моделями пишущих машинок). Так что нужно писать 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.

Тогда есть другие синтаксические ошибки в вашей программе:

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

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

#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>

Кроме того, вы обнаружите, что это работает гораздо лучше, если вы используете Studio Visuel Micromou или CCG (расшифровывается как «Collection de Compilateurs GPU», кстати), а не их более распространенные родственники MVS или GCC.

Мартин Дж.
источник
5
Также будьте осторожны, чтобы дать вашим заголовочным файлам расширение «.e» для «en-tête»
Пьер Арло,
2
@ArlaudPierre: получается, что вы можете использовать любое расширение, какое хотите, для ваших заголовочных файлов, за исключением файлов C-standard-library-header, которые требуются для использования .eрасширения. Но, конечно же , стандартные расширения , такие как .e, .ee, .eppявляются предпочтительными по соглашению ... Для получения дополнительной информации: stackoverflow.com/questions/441568/...
Martin J.
@MartinJ. Правильно, хотя я не имел в виду, что это было обязательно, когда я сказал «будь осторожен».
Пьер Арло
31
GNPU n'est pas UNIX.
abuzittin gillifirca
5
Я помню, как де Голль кричал «Vive le logiciel libre!» ...
Аксель
111
  1. У вас есть семантическая ошибка - второй аргумент функции входа должен иметь тип cara**, а не ent**:

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

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

Angew больше не гордится SO
источник
51

Я пытаюсь скомпилировать эту действительно базовую программу .

Это не бейсиковая программа, поэтому Visual Studio не знает, что с ней делать.

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

zmarties
источник
6
«пройти программу » <3
Пьер Арло
5
Итак, что вы говорите: «Ceci n'est pas une Program BASIC».
Стюарт Олсен
44

Hello Légèreté Fait La Course на орбите ,

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

Я бы порекомендовал следующее:

#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
jwav
источник
3
разве эти два семантически не эквивалентны во французском C?
17

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

#inclure <Montebourg>

хммм ... слишком поздно, это устарело. Новый релиз будет доступен на этой неделе.

pmartin
источник
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;
    }
}

Для дальнейшего использования: Wikipedia Word Order

Крис Пфол
источник
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 ++, если для вашей системы нет бинарных пакетов (мы в Unauthorized Frog рекомендуем использовать для этого g ++, но не стесняйтесь также использовать clang, но игнорируйте предупреждения)) вам нужно будет создать новый проект, и просто скопируйте и вставьте его во вновь созданный principal.fcppфайл. Затем при выполнении FrenChPP++прекомпилятор (который работает очень похоже на то, как Qt обрабатывает свой механизм сигналов / слотов) проанализирует все .fcppфайлы и "переведет" их .fcppв действительные, .cppа затем скомпилирует их, используя системный компилятор по умолчанию.

Ференц Дик
источник
3
Вот ссылка: github.com/carado/FranC
Валентин Лоренц
7

Возможно, вам нужно установить французский языковой пакет для C ++ 11. Если вы не можете его найти, попробуйте http://www.bing.com/translator .

п. местоимения м.
источник
7

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

Это не так std::cendehors, но std::deh(сокращение от dehors ), как std::cinпереводится с std::ded(для dedans ).

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

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

РЕДАКТИРОВАТЬ: Извините, я не заметил еще одну ошибку. Правильная форма, конечно, использует гильеметы, как это:

   std::deh << «Bonjour le monde << std::findl; 
Axel
источник
2
Хорошо
подмечено
Разве этим компиляторам по-прежнему не нужно сбрасывать вывод после завершения процесса?
Гонки легкости на орбите
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
Lesto
4

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

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

rupps
источник
3

Во-первых, вам нужно

#inclure <clibstd>

прежде чем вы сможете использовать константу SORTIE_SUCCÈS.

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

Более того, вы использовали неправильный отступ (GCC на французском языке требует табуляции вместо пробелов) и расстановки фигурных скобок (вам нужно по возможности ставить скобки на одной строке, пробелы между ними не допускаются); если оставить их без изменений, в вашем коде возникнут ошибки «vous ne connaissez pas votre tabulation, Jacques» и «pasassez d'amour entre acclades».

После того, как я изменил эти строки, код успешно скомпилирован. Это все еще не бежало, вероятно по причинам, указанным здесь .

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

Сообщество
источник