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