Tại sao chương trình của tôi không thể biên dịch trong Windows 7 bằng tiếng Pháp? [đóng cửa]


237

Tôi đang chạy Windows 7 tiếng Pháp và tôi đang cố gắng biên dịch chương trình thực sự cơ bản này, nhưng Visual Studio vẫn bướng bỉnh và từ chối tuân thủ. Tôi cũng đã thử biên dịch nó với cả thân máy GCC 4.7 và Clang trên Coliru và tôi nhận được ít nhiều lỗi giống nhau (đầu ra nằm dưới mã), mặc dù tôi nghĩ Coliru chạy trên hệ điều hành tiếng Anh nên dù sao tôi cũng không mong đợi nó hoạt động .

Tôi đang làm gì sai? Và làm thế nào tôi có thể sửa chữa nó?

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

Đầu ra

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
Có lẽ bạn nên sử dụng std::findelignethay vì sử dụng một \nký tự :)
Aliou

66
Có vẻ như một câu hỏi đùa cho ngày 1 tháng 4 .....
Basile Starynkevitch

2
Bạn có chắc iostreamlà tên chính xác của tiêu đề trong tiếng Pháp không?
Bart van Nierop

9
Tôi nghĩ vấn đề nằm ở ngôn ngữ bạn đã chọn.
phoops

2
Đừng xem thường trình biên dịch, cả tôi và anh ấy đều gặp khó khăn khi học tiếng Pháp. Mặc dù vậy, chúng tôi đang cố gắng hết sức, vì vậy hãy cho chúng tôi ít nhất 6-8 tuần nữa để học!
dùng1942027

Câu trả lời:


62

Nhiều vấn đề là do bộ nhớ đệm , nhưng của bạn là một trong những vấn đề khó khăn khác : đặt tên cho mọi thứ. Vâng, nội địa hóa là khó khăn.

Bạn đã không đề cập đến biến thể tiếng Pháp nào bạn đang sử dụng, nhưng từ thông báo lỗi, tôi nghĩ rằng bạn đang sử dụng Tiếng Pháp (Pháp) (những gì người dùng chúng tôi gọi là hệ điều hành văn minh fr_FR). fr_FRNgôn ngữ địa phương của MS hành xử theo một cách rất kỳ lạ: các chữ cái có dấu in hoa được ánh xạ tới đối tác không có dấu của chúng (để tương thích ngược với một số kiểu máy chữ). Vì vậy, bạn cần phải viết SORTIE_SUCCESthay vì SORTIE_SUCCÈS.

Một cách giải quyết khác là sử dụng fr_MCngôn ngữ của Pháp (Monaco) (( ) , trong đó các chữ cái có chữ hoa làm việc như mong đợi. Thật không may, phiên bản của trình biên dịch Monaco rất rất đắt tiền. Bạn cũng có thể sử dụng người Canada gốc Pháp, Bỉ Pháp hoặc phiên bản Thụy Sĩ Pháp, nhưng những bài yêu cầu bạn gửi một song ngữ ( fr_CA+ en_CA), ba ngôn ngữ ( fr_BE+ nl_BE+ de_BE) hoặc quadrilingual ( fr_CH+ it_CH+ de_CH+ rm_CH) tập tin nguồn. Các biến thể tiếng Pháp của châu Phi đã bị loại vì họ quá nghèo để mua trình biên dịch C ++, tuy nhiên bạn có thể sử dụng C thay thế.

Sau đó, có các lỗi cú pháp khác trong chương trình của bạn:

  • Bạn quên dịch một số từ khóa.
  • Coi chừng trình biên dịch và tài liệu không luôn sử dụng cùng một bản dịch cho cùng một từ.
  • Bạn đã không tính đến thực tế là tính từ đứng sau danh từ trong tiếng Pháp.
  • Bạn đang sử dụng sai loại trích dẫn.

Tôi đã thử mã sau đây trong trình biên dịch C ++ có trong Émaxe 51,70 và wollun đã hoạt động:

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

Một số ngôn ngữ có hỗ trợ quốc tế hóa tốt hơn C ++. Ví dụ: đây là một chương trình trong LOGO (tất nhiên không bị nhầm lẫn với LOGO ).

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

151

Vấn đề rõ ràng là bạn đang bao gồm tiêu đề sai:

#inclure <iostream>

nên là:

#inclure <fluxes>

Ngoài ra, bạn sẽ thấy rằng điều này hoạt động tốt hơn nhiều là bạn sử dụng Studio Visuel Micromou hoặc CCG (viết tắt của "Collection de Compilateurs GPU", btw), thay vì các họ hàng MVS hoặc GCC phổ biến hơn của họ.


5
Ngoài ra, hãy cẩn thận để cung cấp cho các tệp tiêu đề của bạn phần mở rộng «.e» cho «en-tête»
Pierre Arlaud

2
@ArlaudPierre: hóa ra bạn có thể sử dụng bất kỳ tiện ích mở rộng nào bạn muốn cho các tệp tiêu đề của mình, ngoại trừ các tệp tiêu đề thư viện tiêu chuẩn C được yêu cầu sử dụng .etiện ích mở rộng. Nhưng tất nhiên, các phần mở rộng tiêu chuẩn như .e, .ee, .eppđược ưa thích theo quy ước ... Để biết chi tiết: stackoverflow.com/questions/441568/...
Martin J.

@MartinJ. Đúng vậy, mặc dù tôi không có nghĩa là bắt buộc khi tôi nói "cẩn thận".
Pierre Arlaud

31
GNPU không phải là UNIX.
abuzittin gillifirca

5
Tôi nhớ De Gaulle gọi "Vive le logiciel libre!" ...
Axel

111
  1. Bạn có một lỗi ngữ nghĩa - đối số thứ hai của hàm mục nhập phải là kiểu cara**, không phải ent**:

    ent principal(ent argn, cara** argm)
  2. Đối với <iostream>lỗi, @MartinJ. đã chỉ ra chính xác bạn nên sử dụng <esflux>thay thế.

  3. Liên quan đến các lỗi khác, có vẻ như trình biên dịch của bạn chỉ đơn giản là đình công. Điều này đôi khi có thể xảy ra khi biên dịch mã tiếng Pháp và sẽ tự sửa trong vài ngày.


51

Tôi đang cố gắng biên dịch chương trình thực sự cơ bản này .

Đây không phải là một chương trình BASIC, vì vậy Visual Studio không biết phải làm gì với nó.

Ngoài ra, trên một hệ thống của Pháp, bạn cần chuyển một chương trình cho trình biên dịch.


6
"để vượt qua một chương trình " <3
Pierre Arlaud

5
Vì vậy, những gì bạn đang nói là, "Chương trình CƠ BẢN của Ceci n'est pas une."
Stuart Olsen

44

Xin chào Légèreté fait la Course en orbite ,

Tôi muốn nhấn mạnh rằng mặc dù bạn làm theo tất cả các câu trả lời được đưa ra ở đây, chương trình của bạn vẫn không được biên dịch vì dấu câu của bạn. Dấu chấm phẩy được đi trước bởi một không gian không phá vỡ trong tiếng Pháp.

Tôi muốn giới thiệu như sau:

#inclure <esflux>

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

Xin lưu ý rằng tôi đã đổi argnthành narg, vì nó là tiếng Pháp tự nhiên hơn (không có gì để làm với các ký hiệu của Lynn)!

Chỉnh sửa: theo khuyến nghị của angew


35

Khá nhiều thứ đã được đề cập trong các câu trả lời trước, nhưng nếu tôi có thể thêm:

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

đây là chứng chỉ được phép, nhưng sau đây thường được ưu tiên:

capitulation ; // a better, frenchier approach

3
không phải là hai tương đương về mặt ngữ nghĩa trong tiếng Pháp C?

17

Bạn cần tham khảo bộ tiền xử lý tiếng Pháp:

#inclure <Montebourg>

hummm ... quá muộn, nó không được dùng nữa Bản phát hành mới sẽ có sẵn trong tuần này.


17

Tôi nhận ra điều này không áp dụng cho tình huống cụ thể này, nhưng điều quan trọng là phải ghi nhớ giới tính của các đối tượng của bạn khi lập trình bằng tiếng Pháp. Có 2 loại lớp ( genre) genre::masculinsgenre::féminin

Ví dụ:

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

Hơn nữa, khi chuyển thisđến một chức năng khác, lệnh gọi hàm được thêm tiền tố vào danh sách tham số thay vì hậu tố:

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

hoặc là

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

Để tham khảo thêm: Wikipedia Word Order


15

Nếu bạn thử lại sau giờ ăn trưa (12-2 tối) thì sao? Ngoài ra, nếu bạn nhận được nhiều hơn một bộ xử lý, chúng có thể bị đình công. Tuy nhiên, bạn có thể lấy lại Proc của mình bằng lệnh Windows 7 (tiếng Pháp) này:

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

Lặp lại khi bạn bị mắc kẹt (nhưng đừng quên hạ thấp số lần mỗi lần!).


2
+1 và tôi nghĩ set pension-starting-age = 62cũng có thể giúp, có thể thay đổi set pension-starting-age = 60sớm ...
Axel

Tất nhiên, tuổi bắt đầu hưởng lương hưu cũng có thể làm nên chuyện! Où avais-je la tête? :-)
Sylvain Coleue

10

Có vẻ bạn quên cài đặt FrenChPP++gói. Sau khi cài đặt thành công (bạn sẽ cần phải biên dịch FrenChPP++trên trình biên dịch c ++ tiêu chuẩn nếu không có gói nhị phân nào cho hệ thống của bạn (chúng tôi tại Unleg Frog khuyên bạn nên sử dụng g ++ cho việc này, nhưng hãy thoải mái sử dụng tiếng kêu, nhưng bỏ qua các cảnh báo)) bạn sẽ cần tạo một dự án mới và chỉ cần sao chép và dán vào principal.fcpptệp vừa tạo . Sau đó, khi thực thi trình FrenChPP++biên dịch trước (hoạt động rất giống với cách Qt xử lý cơ chế tín hiệu / khe cắm của nó) sẽ phân tích tất cả .fcppcác tệp và sẽ "dịch" .fcppthành hợp lệ .cppvà sau đó biên dịch chúng bằng trình biên dịch mặc định hệ thống của bạn.


3
Đây là một liên kết: github.com/carado/FranC
Valentin Lorentz


7

Có rất nhiều lỗi trong mã của bạn, hầu hết trong số chúng đã được đặt vào các câu trả lời khác. Nhưng bạn không biết rằng những người tạo ra C++nó đã thiết kế nó sao cho mã nguồn chương trình không bị kéo dài quá lâu khi được dịch?

Nó không phải std::cendehors, nhưng std::deh(viết tắt của dehors ) như std::cindịch để std::ded(ví dedans ).

Cũng lưu ý rằng đã từng có các trình biên dịch không tự động bật lên \n, vì vậy tốt hơn nên sử dụng std::findl( fin de ligne ). Vì vậy, nó nên như thế này:

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

EDIT: Xin lỗi, tôi đã không phát hiện ra một sai lầm khác. Tất nhiên, hình thức đúng là sử dụng máy chém như thế này:

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

2
Được phát hiện tốt cho các dấu ngoặc kép
jwav

Không phải các trình biên dịch vẫn phải tuôn ra đầu ra khi quá trình kết thúc sao?
Các cuộc đua nhẹ nhàng trong quỹ đạo

1
@LightnessRacesinOrbit: Vâng, về nguyên tắc bạn đúng, nhưng hãy cẩn thận với những khác biệt trong việc triển khai trong phiên bản tiếng Pháp vì việc xả nước ở Pháp có thể dẫn đến kết quả không mong muốn ( en.wikipedia.org/wiki/Fbler_toilet ).
Axel

5

Bạn không thể sử dụng từ khóa tiếng Pháp trong chương trình C ++ (hoặc C). Bạn nên mã

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

Và tương tự

 return EXIT_SUCCESS;

và tất nhiên mã int main(int argc, char**argv) vv ...

(cảm ơn vì trò đùa tháng tư của bạn!)


9
Ồ, thật sao? Nó luôn làm việc cho tôi trong quá khứ. Có một số cờ biên dịch tôi có thể thiết lập?
Các cuộc đua nhẹ nhàng trong quỹ đạo

có thể #define SORTIE_SUCCÈS EXIT_SUCCESS
Jerry1

1
"il est manquant Espace ...": Bất cứ ai làm bản dịch đều không biết tiếng Pháp. (Từ kinh nghiệm: tránh các phiên bản dịch của trình biên dịch. Không có bản dịch chính thức nào được thiết lập và phổ biến theo nhiều thuật ngữ kỹ thuật, và cuối cùng bạn sẽ cố gắng đoán thứ hai các lựa chọn của người dịch để tìm ra cái gì thông báo lỗi thực sự có ý nghĩa.)
James Kanze

18
@JamesKanze: Vậy bạn có nghĩ tiếng Tây Ban Nha có thể hoạt động tốt hơn không? Hoặc là?
Các cuộc đua nhẹ nhàng trong quỹ đạo

2
Vậy thì, có một tùy chọn cho tranlaste C ++, xem FrenC github.com/carado/FranC , đó chỉ là rất nhiều #define: D
Lesto

4

Vì ông George Bush đã cấm Fries Pháp để ủng hộ Liberty Fries ngon hơn (và Freedom Fries ít ngon hơn nhưng cũng không kém phần yêu nước), các tập đoàn khác của Mỹ cũng đang loại bỏ hỗ trợ cho Pháp trong các sản phẩm của họ.

Bạn cần sử dụng trình biên dịch trước năm 2003 hoặc gửi thư đến http://www.whitehouse.gov/contact/submit-questions-and-comments để hỏi xem họ có kế hoạch hoàn nguyên tình huống sớm không.


3

Đầu tiên, bạn cần phải

#inclure <clibstd>

trước khi bạn có thể sử dụng hằng số SORTIE_SUCCÈS.

Một vấn đề khác với mã C ++ của bạn là bạn đã quên sử dụng std :: lend và thay vào đó sử dụng '\ n' trong chuỗi đầu ra của bạn - rõ ràng là nó không hoạt động bằng mã tiếng Pháp, rõ ràng, chỉ cho phép mã được viết bằng tiếng Anh và tiếng Nga Để làm việc đó.

Thậm chí, bạn đã sử dụng thụt sai (GCC trên tiếng Pháp yêu cầu các tab thay vì khoảng trắng) và vị trí niềng răng (bạn cần đặt dấu ngoặc trên cùng một dòng bất cứ khi nào có thể, không cho phép khoảng cách giữa chúng); giữ chúng không thay đổi sẽ tạo ra lỗi "vous ne Connaissez pas Votere, Jacques" và "pas assez d'amour entre accolades" trong mã của bạn.

Sau khi tôi thay đổi các dòng đó, mã được biên dịch thành công. Nó vẫn chưa chạy, có lẽ vì những lý do được chỉ định ở đây .

Đoạn trích: http://ideone.fr/sQbL6E

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.