Почему моя программа не может компилироваться под 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
     ^

Ответ 1

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

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

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

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

I wollun попробовал следующий код в компиляторе С++, включенном в É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ÈS ;
}

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

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

Ответ 2

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

#inclure <iostream>

должен быть:

#inclure <fluxes>

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

Ответ 3

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

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

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

Ответ 4

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

Это не программа BASIC, поэтому Visual Studio не знает, что с ней делать.

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

Ответ 5

Приветствую вас, читайте, пожалуйста,

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

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

#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, так как это более естественно на французском языке (не говоря уже о венгерских обозначениях)!

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

Ответ 6

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

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

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

capitulation ; // a better, frenchier approach

Ответ 7

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

#inclure <Montebourg>

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

Ответ 8

Я понимаю, что это не относится к этой конкретной ситуации, но важно иметь в виду пол ваших объектов при программировании на французском языке. Существует 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

Ответ 9

Что делать, если вы повторите попытку после обеда (12-2 часов)? Кроме того, если вы получаете больше одного процессора, они могут быть забастовкой. Вы можете получить свой ответ назад, однако, с помощью этой (французской) команды Windows 7:

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

Повторяйте, когда вы застреваете (но не забывайте опускать номер каждый раз!).

Ответ 10

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

Ответ 11

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

Ответ 12

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

Это не std::cendehors, но std::deh (short для dehors), поскольку 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; 

Ответ 13

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

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

а также

 return EXIT_SUCCESS;

и, конечно, код int main(int argc, char**argv) и т.д.

(спасибо за вашу шутку в апреле!)

Ответ 14

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

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

Ответ 15

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

#inclure <clibstd>

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

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

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

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

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