Programım neden Windows 7 altında Fransızca derleyemiyor? [kapalı]


237

Windows 7 Fransızca çalıştırıyorum ve bu gerçekten temel programı derlemeye çalışıyorum, ancak Visual Studio inatçı ve uymayı reddediyor. Ben de Coliru hem GCC 4.7 ve Clang gövde ile derleme çalıştı ve ben yine de çalışmak için beklemem bu yüzden Coliru bir İngilizce işletim sistemi üzerinde çalıştığını düşünüyorum olsa da, ben daha az ya da daha az aynı hataları (çıktı kodun altında) olsun .

Neyi yanlış yapıyorum? Nasıl düzeltebilirim?

kod

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

Çıktı

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
Muhtemelen std::findelignebir \nkarakter kullanmak yerine kullanmalısın :)
Aliou

66
1 Nisan için bir şaka sorusu gibi görünüyor .....
Basile Starynkevitch

2
iostreamBaşlığın Fransızca olarak doğru ad olduğundan emin misiniz ?
Bart van Nierop

9
Bence sorun seçtiğiniz dilde yatıyor.
Nisan'da phoops

2
Derleyiciye bakma, o ve ben de fransızca öğrenmekte zorlandık. Yine de elimizden gelenin en iyisini yapıyoruz, bu yüzden bize en az 6-8 hafta daha bilgi verin!
user1942027

Yanıtlar:


62

Birçok sorun önbelleklemeden kaynaklanır , ancak sizinki diğer zor sorunlardan biridir : şeyleri adlandırmak. Evet, yerelleştirme zor.

Hangi Fransızca çeşidini kullandığınızı söylemediniz, ancak hata mesajından bence “Fransızca (Fransa)” (uygar OS'lerin kullanıcılarının dediği fr_FR) kullanıyorsunuz. MS'nin fr_FRyerel ayarı çok garip bir şekilde davranır: büyük harf aksanlı harfler aksanlanmamış eşlerine eşlenir (bazı daktilo modelleriyle geriye dönük uyumluluk için). Yani SORTIE_SUCCESbunun yerine yazmanız gerekiyor SORTIE_SUCCÈS.

Çözüm,fr_MC büyük harf aksanlı harflerin beklendiği gibi çalıştığı “Fransızca (Monako)” ( ) dilini kullanmaktır . Ne yazık ki, derleyicinin Monaco versiyonu çok pahalı. Kanada Fransızcası, Belçika Fransızcası veya İsviçre Fransızcası sürümünü de kullanabilirsiniz, ancak bunların hepsi iki dilli ( fr_CA+ en_CA), üç dilli ( fr_BE+ nl_BE+ de_BE) veya dört dilli ( fr_CH+ it_CH+ de_CH+ rm_CH) bir kaynak dosya göndermenizi gerektirir. Fransızca'nın Afrika varyantları çıktı, çünkü C ++ derleyicisini karşılayamayacak kadar fakirdirler, ancak bunun yerine C'yi kullanabilirsiniz.

Sonra programınızda başka sözdizimi hataları var:

  • Bazı anahtar kelimeleri çevirmeyi unuttun.
  • Derleyicinin ve belgelerin aynı sözcük için her zaman aynı çeviriyi kullanmadığına dikkat edin.
  • Sıfatların Fransızcadan isimden sonra geldiği gerçeğini hesaba katmadınız.
  • Yanlış türde teklifler kullanıyorsunuz.

Ben wollun Émaxe 51,70 dahil C ++ derleyici aşağıdaki kodu denedim ve çalıştı 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È;
}

Bazı diller C ++ 'dan daha iyi uluslararasılaştırma desteğine sahiptir. Örneğin, işte LOGO'da bir program (tabii ki LOGO ile karıştırılmamalıdır ).

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

151

Sorun, açık bir şekilde yanlış standart üstbilgiyi eklemenizdir:

#inclure <iostream>

olmalı:

#inclure <fluxes>

Ayrıca, bunun daha iyi çalıştığını, daha yaygın MVS veya GCC akrabalarından ziyade Studio Visuel Micromou veya CCG ("Collection de Compilateurs GPU", btw) araçlarını kullandığınızı göreceksiniz.


5
Ayrıca başlık dosyalarınıza «en-tête» için «.e» uzantısını vermeye dikkat edin
Pierre Arlaud

2
@ArlaudPierre: uzantıyı kullanmak için gereken C-standard-library-header dosyaları dışında başlık dosyalarınız için istediğiniz herhangi bir uzantıyı kullanabileceğiniz ortaya çıkıyor .e. Ama tabii ki, gibi standart uzantıları .e, .ee, .eppayrıntılar için ... Kongre tarafından tercih edilir: stackoverflow.com/questions/441568/...
Martin J.

@MartinJ. Doğru, "dikkatli olun" dediğimde zorunlu olduğunu kastetmeme rağmen.
Pierre Arlaud

31
GNPU n'est pas UNIX.
abuzittin gillifirca

5
De Gaulle'un "Vive le logiciel libre!" Diye seslendiğini hatırlıyorum ...
Axel

111
  1. Semantik bir hatanız var - giriş işlevinin ikinci argümanı türden olmalı cara**, değil ent**:

    ent principal(ent argn, cara** argm)
  2. İçin <iostream>hatası, @MartinJ. zaten doğru bir şekilde <esflux>bunun yerine kullanmanız gerektiğini belirtti .

  3. Diğer hatalarla ilgili olarak, derleyiciniz sadece grevde gibi görünüyor. Bu, Fransız kodunu derlerken zaman zaman olabilir ve birkaç gün içinde kendini düzeltmelidir.


51

Bu gerçekten temel programı derlemeye çalışıyorum .

Bu bir BASIC programı değildir, bu nedenle Visual Studio onunla ne yapacağını bilmez.

Buna ek olarak, bir Fransız sisteminde derleyiciye bir program geçirmeniz gerekir.


6
"bir programı geçmek için " <3
Pierre Arlaud

5
Yani "Ceci n'est pas une program BASIC" diyorsunuz.
Stuart Olsen

44

Merhaba Légèreté fait la course en yörüngede ,

Burada verilen tüm cevapları takip etseniz bile, programınızın noktalama işaretleriniz nedeniyle hala derlenmeyeceğini vurgulamak isterim. Noktalı virgüllerden önce Fransızca'da kırılmaz bir boşluk gelir.

Aşağıdaki tavsiye ederim:

#inclure <esflux>

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

Değiştim fark Lütfen argniçin nargo (Macar notasyonu olsa alakası yoktur) Fransızca daha doğal olduğu gibi,!

Edit: follow angew'nin tavsiyesi


35

Hemen hemen her şey önceki cevaplarda kapsanmıştır, ancak ekleyebilirsem:

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

Bu edilir certes izin verilir, ancak şu genellikle tercih edilir:

capitulation ; // a better, frenchier approach

3
Fransız C'deki semantik olarak eşdeğer değil mi?

17

Fransız ön işlemcisine başvurmanız gerekir:

#inclure <Montebourg>

hummm ... çok geç, kullanımdan kaldırıldı. Yeni sürüm bu hafta sunulacak.


17

Bunun bu özel durum için geçerli olmadığının farkındayım, ancak Fransızca programlama yaparken nesnelerinizin cinsiyetini akılda tutmak önemlidir. 2 tür sınıf vardır ( genre) genre::masculinsvegenre::féminin

Örneğin:

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

Ayrıca, thisbaşka bir fonksiyona geçerken fonksiyon çağrısı sonek yerine parametre listesiyle birlikte gelir:

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

veya

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

Daha fazla referans için: Wikipedia Kelime Sırası


15

Öğle saatlerinden sonra (12-2 pm) tekrar denerseniz ne olur? Ayrıca, birden fazla işlemci alırsanız, bunlar grevde olabilir. Ancak bu (Fransızca) Windows 7 komutuyla proc'nizi geri alabilirsiniz:

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

Sıkıştığınız zaman tekrarlayın (ancak her seferinde sayıyı azaltmayı unutmayın!).


2
+1 ve bence set pension-starting-age = 62de yardımcı olabilir, set pension-starting-age = 60yakında değişebilir ...
Axel

Tabii ki, emeklilik başlangıç ​​yaşı da hile yapabilir! O avais-je la tête? :-)
Sylvain Rodrigue

10

FrenChPP++Paketi kurmayı unuttuğun anlaşılıyor . Başarılı bir kurulumdan sonra ( FrenChPP++sisteminiz için ikili paketler yoksa standart bir c ++ derleyicisinde derlemeniz gerekir (Yetkisiz Kurbağa'da bunun için g ++ kullanmanızı öneririz, ancak clang'ı kullanmaktan çekinmeyin, ancak uyarıları dikkate almayın) yeni bir proje oluşturmanız ve bunu yeni oluşturulan principal.fcppdosyaya yapıştırmanız yeterlidir . Daha sonra yürütme sırasında FrenChPP++ön derleyici (Qt'nin sinyallerini / yuva mekanizmasını işleme biçimine çok benzer şekilde çalışır) tüm .fcppdosyaları ayrıştıracak ve.fcpp geçerli .cppolana ve daha sonra bunları sistem varsayılan derleyicinizi kullanarak derleyecektir.


3
İşte bir bağlantı: github.com/carado/FranC
Valentin Lorentz


7

Kodunuzda çok fazla hata var, bunların çoğu diğer yanıtlarda zaten kullanılmış. Ama bilmiyor musunuz kiC++ , programın program kaynak kodunun çevrildiğinde çok uzun sürmeyecek şekilde tasarlandığını bilmiyor musunuz?

Değil std::cendehors, ama std::deh( dehors için kısa ) anlamına std::cingelir std::ded( dedans için) ).

Ayrıca \n, otomatik olarak yıkanmayan derleyiciler olduğunu da unutmayın , bu nedenle kullanmak daha iyidir std::findl( fin de ligne ). Yani böyle olmalı:

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

EDIT: Üzgünüm, başka bir hata tespit etmedi. Elbette doğru form, bu gibi guillemets kullanıyor:

   std::deh << «Bonjour le monde << std::findl; 

2
Tırnak işaretleri için iyi tespit
jwav

Bu derleyiciler işlem bittikten sonra çıktıları yıkamak zorunda kalmadılar mı?
Yörüngedeki Hafiflik Yarışları

1
@LightnessRacesinOrbit: Evet, prensipte haklısınız, ancak Fransa'da kızarma istenmeyen sonuçlara yol açabileceğinden, fransızca sürümdeki uygulama farklılıklarına dikkat edin ( en.wikipedia.org/wiki/French_toilet ).
Axel

5

Fransızca anahtar kelimeleri bir C ++ (veya C) programında kullanamazsınız. Kod yazmalısınız

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

Ve aynı şekilde

 return EXIT_SUCCESS;

ve tabii ki kod int main(int argc, char**argv) vs ...

(April aptalın şakası için teşekkürler!)


9
Gerçekten? Geçmişte hep benim için çalıştı. Ayarlayabileceğim bir derleyici bayrağı var mı?
Orbit'te Hafiflik Yarışları

belki #define SORTIE_SUCCÈS EXIT_SUCCESS
Jerry1

1
"il est manquant espace ...": Çeviriyi kim yapmışsa Fransızca bilmiyor. (Deneyimden: Derleyicinin çevrilmiş sürümlerinden kaçının. Teknik terimlerin birçoğu için çeviriler üzerinde resmi olarak kurulmuş ve evrensel olarak kabul edilmiş bir şey yoktur ve sonuçta çevirmenlerin seçimlerini anlamak için ikinci olarak denemeye çalışacaksınız. hata mesajları gerçekten demek.)
James Kanze

18
@JamesKanze: İspanyolca'nın daha iyi çalışabileceğini düşünüyor musunuz? Veya?
Orbit'te Hafiflik Yarışları

2
o zaman, C ++ 'ı tranlaste etmek için bir girişim var , bkz. FrenC github.com/carado/FranC , sadece bir sürü #define: D
Lesto

4

Bay George Bush, patates kızartmasını daha lezzetli Liberty Fries (ve daha az lezzetli ama aynı derecede vatansever Özgürlük Patatesleri) lehine yasakladığından, diğer Amerikan şirketleri de ürünlerinde Fransızlara yönelik desteği kaldırıyor.

2003 öncesi bir derleyici kullanmanız veya durumu yakında geri döndürmeyi planlayıp planlamadıklarını sormak için http://www.whitehouse.gov/contact/submit-questions-and-comments adresine bir posta göndermeniz gerekir .


3

İlk olarak,

#inclure <clibstd>

SORTIE_SUCCÈS sabitini kullanmadan önce.

C ++ kodunuzla ilgili başka bir sorun, std :: ödünç vermeyi unutmanız ve bunun yerine çıktı dizenizde '\ n' kullanmanızdır - Fransızca kodda çalışmaz, açıkçası, yalnızca İngilizce ve Rusça yazılmış kodlara izin verilir bunu yapmak için.

Dahası, yanlış girinti kullandınız (Fransızca'da GCC boşluklar yerine sekmeler gerektirir) ve küme yerleşimi (mümkün olduğunda aynı çizgiye parantez koymanız gerekir, aralarında boşluk olmamalıdır); onları değiştirmeden kodunuzda "vous ne connaissez pas votre tabulation, Jacques" ve "pas assez d'amour entre accolades" çalışma zamanı hataları üretir.

Bu satırları değiştirdikten sonra kod başarıyla derlendi. Muhtemelen burada belirtilen nedenlerden dolayı hala çalışmadı .

Snippet: http://ideone.fr/sQbL6E

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.