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

Я использую 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
^

237

Решение

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

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

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

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

Другие решения

Проблема, очевидно, в том, что вы используете неправильный стандартный заголовок:

#inclure <iostream>

должно быть:

#inclure <fluxes>

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

151

  1. У вас есть семантическая ошибка — второй аргумент функции входа должен иметь тип cara**не ent**:

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

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

111

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

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

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

51

Привет 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ÈS ;
}

Пожалуйста, обратите внимание, что я изменился argn в narg, поскольку это более естественно на французском языке (не имеет никакого отношения к венгерским примечаниям все же)!

Изменить: следуя рекомендации ангела

44

Почти все было рассмотрено в предыдущих ответах, но если я могу добавить:

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

это Certes разрешено, но обычно предпочтительнее следующее:

capitulation ; // a better, frenchier approach
35

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

#inclure <Montebourg>

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

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;
}
}

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

17
По вопросам рекламы [email protected]