¿Por qué mi programa no puede compilarse bajo Windows 7 en francés? [cerrado]

237

Estoy ejecutando Windows 7 French y estoy tratando de compilar este programa realmente básico, pero Visual Studio es terco y se niega a cumplir. También intenté compilarlo con GCC 4.7 y Clang trunk en Coliru y obtengo más o menos los mismos errores (la salida está debajo del código), aunque creo que Coliru se ejecuta en un sistema operativo inglés, por lo que no esperaría que funcione de todos modos .

¿Qué estoy haciendo mal? ¿Y cómo puedo arreglarlo?

Código

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

Salida

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
     ^
Carreras de ligereza en órbita
fuente
3
Probablemente deberías usar en std::findelignelugar de usar un \npersonaje :)
Aliou
66
Parece una pregunta de broma para el 1 de abril .....
Basile Starynkevitch
2
¿Estás seguro de que iostreames el nombre correcto del encabezado en francés?
Bart van Nierop
99
Creo que el problema radica en el idioma que has elegido.
phoops
2
No menosprecies al compilador, a él y a mí nos costó mucho aprender francés. Sin embargo, estamos haciendo todo lo posible, ¡así que danos al menos 6-8 semanas más para aprender!
user1942027

Respuestas:

62

Muchos problemas se deben al almacenamiento en caché , pero el tuyo es uno de los otros problemas difíciles : nombrar cosas. Sí, la localización es difícil.

No mencionaste qué variante de francés estás usando, pero por el mensaje de error, creo que estás usando "francés (Francia)" (lo que llamamos los usuarios de sistemas operativos civilizados fr_FR). La fr_FRconfiguración regional de MS se comporta de una manera muy extraña: las letras mayúsculas acentuadas se asignan a su contraparte sin acento (para compatibilidad con versiones anteriores de algunos modelos de máquinas de escribir). Entonces necesitas escribir en SORTIE_SUCCESlugar de SORTIE_SUCCÈS.

Una solución alternativa es utilizar el idioma "francés (Mónaco)" ( fr_MC) , donde las letras mayúsculas acentuadas funcionan como se espera. Desafortunadamente, la versión del compilador de Mónaco es muy muy cara. También puede usar la versión en francés canadiense, francés belga o francés suizo, pero todo esto requiere que envíe un archivo fuente bilingüe ( fr_CA+ en_CA), trilingüe ( fr_BE+ nl_BE+ de_BE) o cuadrilingüe ( fr_CH+ it_CH+ de_CH+ rm_CH). Las variantes africanas del francés están fuera porque son demasiado pobres para permitirse un compilador de C ++, sin embargo, podría usar C en su lugar.

Luego hay otros errores de sintaxis en su programa:

  • Olvidó traducir algunas palabras clave.
  • Tenga en cuenta que el compilador y la documentación no siempre usan la misma traducción para la misma palabra.
  • No explicaste el hecho de que los adjetivos van después del sustantivo en francés.
  • Estás usando el tipo incorrecto de citas.

Probé el siguiente código en el compilador de C ++ incluido en Émaxe 51,70, y funcionó:

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

Algunos lenguajes tienen mejor soporte de internacionalización que C ++. Por ejemplo, aquí hay un programa en LOGO (que no debe confundirse con LOGO, por supuesto).

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin
Gilles 'SO- deja de ser malvado'
fuente
151

El problema es obviamente que está incluyendo el encabezado estándar incorrecto:

#inclure <iostream>

debiera ser:

#inclure <fluxes>

Además, encontrará que esto funciona mucho mejor si usa Studio Visuel Micromou o las herramientas CCG (significa "Collection de Compilateurs GPU", por cierto), en lugar de sus parientes más comunes de MVS o GCC.

Martin J.
fuente
55
También tenga cuidado de dar a sus archivos de encabezado la extensión «.e» para «en-tête»
Pierre Arlaud
2
@ArlaudPierre: resulta que puede usar cualquier extensión que desee para sus archivos de encabezado, excepto los archivos de encabezado de biblioteca estándar C que se requieren para usar la .eextensión. Pero, por supuesto, las extensiones estándar tales como .e, .ee, .eppson los preferidos por convención ... Para más detalles: stackoverflow.com/questions/441568/...
Martin J.
@MartinJ. Correcto, aunque no quise decir que era obligatorio cuando dije "ten cuidado".
Pierre Arlaud
31
GNPU n'est pas UNIX.
abuzittin gillifirca 01 de
55
Recuerdo a De Gaulle gritando "Vive le logiciel libre!" ...
Axel
111
  1. Tiene un error semántico: el segundo argumento de la función de entrada debe ser de tipo cara**, no ent**:

    ent principal(ent argn, cara** argm)
  2. Para el <iostream>error, @MartinJ. Ya señaló correctamente que debería estar utilizando en su <esflux>lugar.

  3. Con respecto a los otros errores, parece que su compilador está simplemente en huelga. Esto puede suceder ocasionalmente al compilar código francés y debería solucionarse en unos pocos días.

Angew ya no está orgulloso de SO
fuente
51

Estoy tratando de compilar este programa realmente básico .

Este no es un programa BÁSICO, por lo que Visual Studio no sabe qué hacer con él.

Además, en un sistema francés, debe pasar un programa al compilador.

zmarties
fuente
66
"para aprobar un programa " <3
Pierre Arlaud
55
Entonces, lo que estás diciendo es: "Ceci n'est pas une program BASIC".
Stuart Olsen
44

Hola Légèreté fait la course en orbite ,

Me gustaría enfatizar que aunque sigas todas las respuestas dadas aquí, tu programa aún no se compilará debido a tu puntuación. Los puntos y comas están precedidos por un espacio ininterrumpido en francés.

Yo recomendaría lo siguiente:

#inclure <esflux>

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

¡Tenga en cuenta que cambié argna narg, ya que es más natural en francés (aunque no tiene nada que ver con las anotaciones húngaras)!

Editar: siguió la recomendación de angew

Pierre Arlaud
fuente
35

Casi todo se ha cubierto en las respuestas anteriores, pero si puedo agregar:

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

esto se certes permitido, pero por lo general se prefiere la siguiente:

capitulation ; // a better, frenchier approach
jwav
fuente
3
¿No son los dos semánticamente equivalentes en francés C?
17

Debe hacer referencia al preprocesador francés:

#inclure <Montebourg>

hummm ... demasiado tarde, está en desuso. El nuevo lanzamiento estará disponible esta semana.

pmartin
fuente
17

Me doy cuenta de que esto no se aplica a esta situación particular, pero es importante tener en cuenta el género de sus objetos al programar en francés. Hay 2 tipos de clases ( genre) genre::masculinsygenre::féminin

Por ejemplo:

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

Además, al pasar thisa otra función, la llamada a la función tiene el prefijo de la lista de parámetros en lugar de un sufijo:

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

o

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

Para mayor referencia: Wikipedia Word Order

Chris Pfohl
fuente
15

¿Qué pasa si vuelve a intentar después de las horas de almuerzo (12-2 pm)? Además, si obtiene más de un procesador, pueden estar en huelga. Sin embargo, puede recuperar su proceso con este comando (francés) de Windows 7:

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

Repita cuando esté atascado (¡pero no olvide reducir el número cada vez!).

Sylvain Rodrigue
fuente
2
+1, y creo set pension-starting-age = 62que también podría ayudar, podría cambiar set pension-starting-age = 60pronto ...
Axel
¡Por supuesto, la edad de inicio de la pensión también podría ser la solución! Où avais-je la tête? :-)
Sylvain Rodrigue
10

Parece que olvidó instalar el FrenChPP++paquete. Después de una instalación exitosa (necesitará compilar FrenChPP++en un compilador estándar de c ++ si no hay paquetes binarios para su sistema (nosotros en la Rana no autorizada recomendamos usar g ++ para esto, pero siéntase libre de usar clang también, pero ignore las advertencias)) necesitará crear un nuevo proyecto, y simplemente copie y pegue esto en el principal.fcpparchivo recién creado . Luego, después de la ejecución, el FrenChPP++precompilador (que funciona de manera muy similar a la forma en que Qt maneja sus señales / mecanismo de ranura) analizará todos los .fcpparchivos y los "traducirá" .fcppa válidos .cppy luego los compilará utilizando el compilador predeterminado del sistema.

Ferenc Deak
fuente
3
Aquí hay un enlace: github.com/carado/FranC
Valentin Lorentz
7

Hay tantos errores en su código, la mayoría de ellos ya se han abordado en las otras respuestas. Pero, ¿no sabes que los creadores lo C++diseñaron para que el código fuente del programa no se alargue demasiado cuando se traduce?

No lo es std::cendehors, pero std::deh(abreviatura de dehors ) como se std::cintraduce en std::ded(para dedans ).

También tenga en cuenta que solía haber compiladores que no funcionaban automáticamente \n, por lo que es mejor usarlo std::findl( fin de ligne ). Entonces debería ser así:

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

EDITAR: Lo siento, no vi otro error. La forma correcta, por supuesto, es usar guillemets como este:

   std::deh << «Bonjour le monde << std::findl; 
Axel
fuente
2
Bien visto por las comillas
jwav 01 de
¿Esos compiladores todavía no tenían que vaciar la salida cuando finalizaba el proceso?
Carreras de ligereza en órbita el
1
@LightnessRacesinOrbit: Sí, en principio tiene razón, pero tenga cuidado con las diferencias en la implementación en la versión francesa, ya que el vaciado en Francia puede generar resultados no deseados ( en.wikipedia.org/wiki/French_toilet ).
Axel
5

No puede usar palabras clave en francés en un programa C ++ (o C). Deberías codificar

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

y de la misma manera

 return EXIT_SUCCESS;

y, por supuesto, código, int main(int argc, char**argv) etc.

(¡Gracias por tu broma de los inocentes!)

Basile Starynkevitch
fuente
99
¿Oh enserio? Siempre me ha funcionado en el pasado. ¿Hay alguna bandera del compilador que pueda configurar?
Carreras de ligereza en órbita
quizás #define SORTIE_SUCCÈS EXIT_SUCCESS
Jerry1
1
"il est manquant espace ...": Quien hizo la traducción no sabe francés. (Según la experiencia: evite las versiones traducidas del compilador. No hay traducciones formalmente establecidas y acordadas universalmente para muchos de los términos técnicos, y terminará tratando de adivinar las opciones de los traductores para averiguar qué mensajes de error realmente significan.)
James Kanze
18
@JamesKanze: ¿Entonces crees que el español puede funcionar mejor? ¿O?
Carreras de ligereza en órbita el
2
bueno, entonces hay un intento de trasladar C ++, vea FrenC github.com/carado/FranC , es solo un montón de #define: D
Lesto
4

Dado que el Sr. George Bush prohibió las papas fritas a favor de las papas fritas más sabrosas (y las papas fritas menos sabrosas pero igualmente patrióticas), otras corporaciones estadounidenses también están eliminando el apoyo al francés en sus productos.

Debe utilizar un compilador anterior a 2003 o enviar un correo electrónico a http://www.whitehouse.gov/contact/submit-questions-and-comments para preguntar si planean revertir la situación pronto.

rupturas
fuente
3

En primer lugar, necesitas

#inclure <clibstd>

antes de poder usar la constante SORTIE_SUCCÈS.

Otro problema con su código C ++ es que olvidó usar std :: lend y en su lugar usó '\ n' en su cadena de salida; no funcionará en código francés, obviamente, solo se permite el código escrito en inglés y ruso Para hacer eso.

Aún más, usó sangría incorrecta (GCC en francés requiere pestañas en lugar de espacios) y colocación de llaves (debe colocar llaves en la misma línea siempre que sea posible, no se permiten espacios entre ellas); mantenerlos sin cambios generará "vous ne connaissez pas votre tabulation, Jacques" y errores de tiempo de ejecución "pas assez d'amour entre accolades" en su código.

Después de cambiar esas líneas, el código se compiló con éxito. Todavía no se ha ejecutado, probablemente por las razones especificadas aquí .

Fragmento: http://ideone.fr/sQbL6E

Comunidad
fuente