Tại sao chương trình này bị từ chối bởi ba trình biên dịch C ++?


468

Tôi gặp một số khó khăn khi biên dịch chương trình C ++ mà tôi đã viết.

Chương trình này rất đơn giản và, theo hiểu biết tốt nhất của tôi, tuân thủ tất cả các quy tắc được quy định trong Tiêu chuẩn C ++. Tôi đã đọc toàn bộ ISO / IEC 14882: 2003 hai lần để chắc chắn.

Chương trình như sau:

nhập mô tả hình ảnh ở đây

Đây là đầu ra tôi nhận được khi cố gắng biên dịch chương trình này với Visual C ++ 2010:

c:\dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172

Thất vọng, tôi đã thử g ++ 4.5.2, nhưng cũng không ích lợi gì:

c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status

Tôi hình dung rằng Clang (phiên bản 3.0 thân 127530) phải hoạt động, vì nó được đánh giá rất cao về sự phù hợp tiêu chuẩn của nó. Thật không may, nó thậm chí còn không cung cấp cho tôi một trong những thông báo lỗi được tô sáng và đẹp mắt:

c:\dev>clang++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
clang++: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)

Thành thật mà nói, tôi không thực sự biết bất kỳ thông báo lỗi nào trong số này.

Nhiều chương trình C ++ khác có tệp nguồn có phần mở rộng .cpp , vì vậy tôi nghĩ có lẽ tôi cần đổi tên tệp của mình. Tôi đã đổi tên thành helloworld.cpp , nhưng điều đó không giúp được gì. Tôi nghĩ rằng Clang có một lỗi rất nghiêm trọng vì khi tôi thử sử dụng nó để biên dịch chương trình đã đổi tên, nó đã lật ra, in "84 cảnh báo và 20 lỗi được tạo." và làm cho máy tính của tôi kêu bíp rất nhiều!

Tôi đã làm gì sai ở đây? Tôi đã bỏ lỡ một số phần quan trọng của Tiêu chuẩn C ++? Hay cả ba trình biên dịch thực sự bị hỏng đến mức họ không thể biên dịch chương trình đơn giản này?

Câu trả lời:


173

Trong tiêu chuẩn, §2.1 / 1 chỉ định:

Các ký tự tệp nguồn vật lý được ánh xạ, theo cách được xác định theo triển khai, đến bộ ký tự nguồn cơ bản (giới thiệu các ký tự dòng mới cho các chỉ báo cuối dòng) nếu cần.

Trình biên dịch của bạn không hỗ trợ định dạng đó (aka không thể ánh xạ nó tới bộ ký tự nguồn cơ bản ), do đó nó không thể chuyển sang các giai đoạn xử lý tiếp theo, do đó xảy ra lỗi. Hoàn toàn có khả năng trình biên dịch của bạn hỗ trợ ánh xạ từ hình ảnh sang bộ ký tự nguồn cơ bản, nhưng không bắt buộc.

Vì ánh xạ này được xác định theo triển khai, bạn sẽ cần xem tài liệu triển khai của mình để xem các định dạng tệp mà nó hỗ trợ. Thông thường, mọi nhà cung cấp trình biên dịch chính đều hỗ trợ các tệp văn bản (được xác định chính xác): bất kỳ tệp nào được tạo bởi trình soạn thảo văn bản, thường là một loạt các ký tự.


Lưu ý rằng tiêu chuẩn C ++ dựa trên tiêu chuẩn C (§1.1 / 2) và tiêu chuẩn C (99) cho biết, trong §1.2:

Tiêu chuẩn quốc tế này không chỉ định
- cơ chế mà các chương trình C được chuyển đổi để sử dụng bởi một hệ thống xử lý dữ liệu;
- cơ chế mà các chương trình C được gọi để sử dụng bởi một hệ thống xử lý dữ liệu;
- cơ chế mà dữ liệu đầu vào được chuyển đổi để sử dụng bởi chương trình C;

Vì vậy, một lần nữa, việc xử lý các tệp nguồn là thứ bạn cần tìm trong tài liệu biên dịch.


23
Tôi nghĩ rằng câu đó là mơ hồ ở tốt nhất. Từ điển Merriam-Webster nói rằng văn bảncác từ và hình thức ban đầu của một tác phẩm được viết hoặc in hoặc một tác phẩm có chứa văn bản đó . Tập tin nguồn này rõ ràng thuộc định nghĩa đó. Bạn có nghĩ rằng tôi nên nộp báo cáo lỗi với Nhóm làm việc về ngôn ngữ cốt lõi không?
James McNellis

15
Oh; Tôi hoàn toàn quên đọc tất cả các tài liệu tham khảo. Tuy nhiên, tôi nghĩ rằng đoạn đó được đưa ra khỏi bối cảnh, vì vậy tôi sẽ đọc và đọc toàn bộ ISO / IEC 9899: 1990 và sẽ đăng lại ở đây một khi tôi hoàn toàn hiểu nó.
James McNellis



211

Của bạn <>, (), {}dường như không phù hợp với nhau; Hãy thử vẽ chúng tốt hơn.


44
Mặc dù tôi không đánh giá cao việc bạn tạo ra niềm vui cho chữ viết tay của mình, đây có thể là vấn đề thực sự và sẽ giải thích lỗi tôi gặp phải khi thử biên dịch helloworld.cpp với Visual C ++: "lỗi nghiêm trọng C1004: lỗi không mong muốn tìm thấy tệp "Tôi sẽ thử lại và báo cáo lại sớm. Cảm ơn!
James McNellis

37
@James đảm bảo bạn tắt tất cả tối ưu hóa png. nó làm cho việc gỡ lỗi dễ dàng hơn.
wilmustell

5
@James: "tập tin cuối bất ngờ" gần như chắc chắn có nghĩa là chính bạn }đang gây ra sự cố. Hãy thử tập trung vào việc kết hợp điều đó với{
Carson63000

156

Bạn có thể thử đoạn script python sau đây. Lưu ý rằng bạn cần cài đặt PILpytesser .

from pytesser import *
image = Image.open('helloworld.png')  # Open image object using PIL
print image_to_string(image)     # Run tesseract.exe on image

Để sử dụng nó, hãy làm:

python script.py > helloworld.cpp; g++ helloworld.cpp

110

Bạn đã quên sử dụng Comic Sans làm phông chữ, đó là lý do tại sao nó bị lỗi.


73
Thật không may, đây là phông chữ duy nhất mà tay tôi hỗ trợ. Điều đó sẽ rất buồn nếu tôi không thể lập trình trong C ++ vì điều này. Bạn có nghĩ rằng Java sẽ hỗ trợ phông chữ này?
James McNellis

8
Bạn sẽ cần Comic Sans khi bạn nghĩ đến việc vẽ truyện tranh, vì vậy bạn nên nghiêm túc xem xét nâng cấp tay.
sharptooth

8
C ++ yêu cầu đào tạo lâu năm về thư pháp. Nếu bạn không có thời gian, hãy thử Visual Basic hoặc chỉ mã máy nhị phân (Bạn chỉ cần lấy đúng 0 và 1 ngay sau đó).
Frank Osterfeld

1
@Frank C ++ 0x §42.1 / 1 chỉ định "Tất cả các chuỗi phải theo kiểu Gothic".
Mateen Ulhaq

75

Tôi không thể thấy một dòng mới sau cú đúp cuối cùng đó.

Như bạn đã biết: "Nếu một tệp nguồn không trống không kết thúc bằng một ký tự dòng mới, ... thì hành vi không được xác định".


16
Hmmm. Rất may, quy tắc lố bịch này đã bị xóa trong C ++ 0x. Điều đó nói rằng, làm thế nào để kết thúc một tập tin như vậy với một dòng mới? Tôi nghĩ rằng tôi đã để lại đủ chỗ ở cuối văn bản (nếu bạn làm nổi bật tệp nguồn, bạn sẽ thấy phòng phụ tôi còn lại). Cảm ơn các mẹo mặc dù!
James McNellis

8
Nếu bạn không có đủ khoảng trắng, tôi có thể thử biên dịch nó trên hệ thống của mình. Tôi có bốn màn hình để tôi có thể thử biên dịch từ màn hình ngoài cùng bên trái của mình.
Tin Man

74

Chương trình này là hợp lệ - tôi có thể tìm thấy không có lỗi.

Tôi đoán là bạn có virus trên máy của bạn. Sẽ là tốt nhất nếu bạn định dạng lại ổ đĩa của mình và cài đặt lại hệ điều hành.

Hãy cho chúng tôi biết cách thức hoạt động hoặc nếu bạn cần trợ giúp với việc cài đặt lại.

Tôi ghét virus.


17
Có, hãy thử cài đặt Linux. Tôi đổ lỗi cho Windows cho vấn đề của bạn.
Raedwald

62

Tôi đã tìm thấy nó giúp không viết mã của tôi trên kính của màn hình bằng bút đánh dấu ma thuật, mặc dù nó trông rất đẹp khi nó thực sự màu đen. Màn hình lấp đầy quá nhanh và sau đó những người đưa cho tôi một màn hình sạch sẽ gọi tên tôi mỗi tuần.

Một vài nhân viên của tôi (tôi là một người quản lý) đang bắt đầu mua cho tôi một trong những chiếc máy tính màu đỏ có núm. Họ nói rằng tôi sẽ không cần điểm đánh dấu và tôi có thể tự làm sạch màn hình khi nó đầy nhưng tôi phải cẩn thận lắc nó. Tôi nghĩ nó thật tế nhị.

Đó là lý do tại sao tôi thuê những người thông minh.


2
Một Wacom Cintiq thích hợp hơn nhiều cho người quản lý. Đó là đắt tiền, và làm cho bạn cảm thấy thực sự quan trọng. Bất kỳ nhà thiết kế đồ họa nào trong công ty của bạn sẽ có địa vị thấp hơn nhiều và do đó nên sử dụng màn hình EGA. Người khai báo nên sử dụng màn hình CGA. Lập trình viên nên sử dụng thiết bị đầu cuối đơn sắc cũ.
Steve314

7
Tôi đã có một màn hình "Life Like" trong một thời gian dài. Nó thực tế đến mức bạn thề rằng trình bảo vệ màn hình của cá bơi là có thật, và người thợ lặn nhỏ trông giống như anh ta đang bơi. Tôi liên tục bị ướt cánh tay khi cố lấy chiếc rương kho báu từ dưới đáy thật. Vấn đề duy nhất là trình bảo vệ màn hình luôn bật và tiếng ồn sủi bọt thực tế khiến nó khó nghe. Ồ, và họ nói để bảo trì tôi phải rắc thứ vào đầu màn hình hàng ngày nếu không trình bảo vệ màn hình sẽ ngừng hoạt động. Nó đã làm điều đó một lần, và chàng trai, mùi hai ngày sau đó thực sự là thực tế.
Tin Man

59

File format not recognizedBạn cần định dạng đúng tập tin của bạn. Điều đó có nghĩa là sử dụng đúng màu sắc và phông chữ cho mã của bạn. Xem các tài liệu cụ thể cho từng trình biên dịch vì các màu này khác nhau giữa các trình biên dịch;)


14
Ồ, điều đó thật có ý nghĩa ... Tôi có một hộp 96 bút màu, vì vậy tôi chắc chắn rằng tôi có màu nền trước chính xác. Tôi sẽ lấy một số giấy xây dựng màu vào ngày mai và thử nó trên một màu giấy khác.
James McNellis

3
Để an toàn, tốt hơn bạn nên lấy một số bút chì màu và sơn dầu. Một thực tế nổi tiếng là C ++ có nghĩa là một ngôn ngữ rất khó định dạng chính xác.
hellowworld922

Yeap và đừng quên sử dụng điểm đánh dấu.
sharptooth

6
@sharptooth - tô sáng cú pháp là một tính năng IDE - bạn không có ý định làm điều đó bằng tay. Vì vậy, hãy chắc chắn rằng bạn có một cánh tay robot đi cùng với điểm đánh dấu nổi bật đó.
Steve314

56

Bạn đã quên bộ xử lý trước. Thử cái này:

pngtopnm helloworld.png | ocrad | g++ -x 'c++' -

8
Oh! Tôi nghĩ rằng tiền xử lý được bao gồm với trình biên dịch! Tôi sẽ cố gắng tìm một bộ tiền xử lý hoạt động trên máy tính xách tay Windows của tôi.
James McNellis

3
@James McNellis: Bộ tiền xử lý không phải là một chương trình, đó là một phần cứng trông giống như một điểm đánh dấu - bạn di chuyển nó qua văn bản của bạn và nó được xử lý trước.
sharptooth

49

Bạn đã viết tay chương trình và sau đó quét nó vào máy tính? Đó là những gì được ngụ ý bởi "helloworld.png". Nếu đó là trường hợp, bạn cần lưu ý rằng tiêu chuẩn C ++ (ngay cả trong phiên bản mới nhất của nó) không yêu cầu sự hiện diện của nhận dạng ký tự quang học, và thật không may, nó không được đưa vào như một tính năng tùy chọn trong bất kỳ trình biên dịch hiện tại nào.

Bạn có thể muốn xem xét chuyển đổi đồ họa sang định dạng văn bản. Bất kỳ trình soạn thảo văn bản đơn giản có thể được sử dụng; việc sử dụng một trình xử lý văn bản, trong khi có khả năng tạo ra một bản in đẹp, rất có thể sẽ dẫn đến cùng một lỗi mà bạn gặp phải khi cố gắng quét.

Nếu bạn thực sự thích phiêu lưu, bạn có thể cố gắng viết mã của mình vào trình xử lý văn bản. In nó, tốt nhất là sử dụng phông chữ như OCR-A . Sau đó, lấy bản in của bạn ra và quét lại. Quét sau đó có thể được chạy qua gói OCR của bên thứ ba để tạo một biểu mẫu văn bản. Mẫu văn bản sau đó có thể được biên dịch bằng một trong nhiều trình biên dịch tiêu chuẩn.

Tuy nhiên, hãy cẩn thận với chi phí lớn của giấy mà điều này sẽ phải chịu trong giai đoạn gỡ lỗi.


Vấn đề nan giải gà & trứng: Có thể viết mã C ++ cho phần mềm OCR và biên dịch nó mà không cần OCR không?
jweyrich

5
Vâng, duh, bạn sử dụng lắp ráp cho OCR ban đầu.
Kevin Lacquement

@jweyrich - Tôi nghĩ rằng bạn sẽ cần phải khởi động C ++ / OCR với chuỗi công cụ asm / OCR của bạn trước.
Michael Burr


46

Vẽ bao gồm bên dưới để làm cho nó biên dịch:

#include <ChuckNorris>

Tôi nghe nói anh ta có thể biên dịch lỗi cú pháp ...


46
Cá nhân tôi thích #include <JonSkeet>.
Icode4food

40

Thật không may, bạn đã chọn ba trình biên dịch mà tất cả đều hỗ trợ nhiều ngôn ngữ, không chỉ C ++. Tất cả đều phải đoán ngôn ngữ lập trình bạn đã sử dụng. Như bạn có thể đã biết, định dạng PNG phù hợp với tất cả các ngôn ngữ lập trình, không chỉ C ++.

Thông thường trình biên dịch có thể tự tìm ra ngôn ngữ. Chẳng hạn, nếu PNG rõ ràng được vẽ bằng bút màu, trình biên dịch sẽ biết nó có chứa Visual Basic. Nếu nó trông giống như được vẽ bằng bút chì cơ học, thật dễ dàng để nhận ra kỹ sư đang làm việc, viết mã FORTRAN.

Bước thứ hai này cũng không giúp trình biên dịch, trong trường hợp này. C và C ++ trông giống nhau quá #include. Do đó, bạn phải giúp trình biên dịch quyết định ngôn ngữ thực sự là gì. Bây giờ, bạn có thể sử dụng các phương tiện không chuẩn. Chẳng hạn, trình biên dịch Visual Studio chấp nhận / TC và / TP đối số dòng lệnh hoặc bạn có thể sử dụng tùy chọn "Biên dịch dưới dạng: C ++" trong tệp dự án. GCC và CLang có cơ chế riêng mà tôi không biết.

Do đó, tôi khuyên bạn nên sử dụng phương thức tiêu chuẩn thay vì nói với trình biên dịch của bạn rằng mã theo sau là trong C ++. Như bạn đã phát hiện ra bây giờ, trình biên dịch C ++ rất kén chọn về những gì họ chấp nhận. Do đó, cách tiêu chuẩn để xác định C ++ là do các lập trình viên đe dọa thêm vào mã C ++ của họ. Chẳng hạn, dòng sau sẽ làm rõ cho trình biên dịch của bạn rằng phần tiếp theo là C ++ (và anh ta sẽ biên dịch nó tốt hơn mà không có khiếu nại).

// To the compiler: I know where you are installed. No funny games, capice?

10
Tôi nghĩ #pragmalà cách chính xác để "nhận một tin nhắn" cho trình biên dịch?
Lev Giám mục

33

Hãy thử cái này:

Bạn có thấy con khủng long trong tàu con thoi không?


4
Tôi nghĩ rằng có một lỗi đánh máy - nó phải là endl(L) chứ không phải end1(một). Nhưng +1 được thực hiện độc đáo!
Rupi

44
Tôi đã nhìn chằm chằm vào nó trong ba giờ nhưng tôi vẫn không thể thấy một con khủng long hay tàu con thoi. :-(
oosterwal

32

Trình biên dịch của bạn có được đặt ở chế độ chuyên gia không?! Nếu có, nó không nên biên dịch. Trình biên dịch hiện đại đã mệt mỏi với "Hello World!"


27

OCR cho biết:

N lml_e <loJ+_e__}

.lnt Mk.,n ( ln+ _rSC Lhc_yh )
h_S_
_l

s_l . co__ <, " H llo uo/_d ! '` << s l . ena_ .
TP__rn _ |
_|

Đó là khá tốt, công bằng.


4
Ồ, OCR đã được cải thiện kể từ khi tôi cố quét chữ viết tay của mình (cũng mất hàng giờ để viết thẳng).
James P.

40
Tôi nghĩ rằng chúng ta cần thêm một thẻ Perl.
MSalters

26

helloworld.png: tệp không được nhận dạng: Định dạng tệp không được nhận dạng

Rõ ràng, bạn nên định dạng ổ cứng của bạn.

Thực sự, những lỗi này không khó đọc.


20

Tôi đã chuyển đổi chương trình của bạn từ PNG sang ASCII, nhưng nó chưa được biên dịch. Để biết thông tin của bạn, tôi đã thử với độ rộng dòng 100 và 250 ký tự nhưng cả hai đều mang lại kết quả tương đương.

   `         `  .     `.      `         ...                                                         
   +:: ..-.. --.:`:. `-` .....:`../--`.. `-                                                         
           `      `       ````                                                                      
                                                                      `                             
   ` `` .`       ``    .`    `.               `` .      -``-          ..                            
   .`--`:`   :::.-``-. : ``.-`-  `-.-`:.-`    :-`/.-..` `    `-..`...- :                            
   .`         ` `    ` .`         ````:``  -                  ` ``-.`  `                            
   `-                                ..                           ``                                
    .       ` .`.           `   `    `. ` .  . `    .  `    . . .` .`  `      ` ``        ` `       
           `:`.`:` ` -..-`.`-  .-`-.    /.-/.-`.-.  -...-..`- :```   `-`-`  :`..`-` ` :`.`:`- `     
            ``  `       ```.      ``    ````    `       `     `        `    `         `   `   .     
            : -...`.- .` .:/ `                                                                      
    -       `             `` .                                                                      
    -`                                                                                              
    `                                                                                               

8
Thay vào đó, bạn có thể nên sử dụng 80 hoặc thậm chí 72 cột
Tobias Kienzler

16

Vấn đề đầu tiên là, bạn đang cố trả về một giá trị không chính xác ở cuối hàm chính. Tiêu chuẩn C ++ chỉ ra rằng kiểu trả về của hàm main () là int, nhưng thay vào đó bạn đang cố gắng trả về tập hợp trống.

Vấn đề khác là - ít nhất là với g ++ - trình biên dịch suy ra ngôn ngữ được sử dụng từ hậu tố tệp. Từ g ++ (1):

Đối với bất kỳ tệp đầu vào cụ thể nào, hậu tố tên tệp xác định loại biên dịch nào được thực hiện:

file.cc file.cp file.cxx file.cpp file.CPP file.c ++ file.C

Mã nguồn C ++ phải được xử lý trước. Lưu ý rằng trong .cxx, hai chữ cái cuối cùng phải có nghĩa đen là x. Tương tự như vậy, .C đề cập đến một chữ viết hoa C.

Việc sửa các lỗi này sẽ giúp bạn có một ứng dụng Hello World hoạt động đầy đủ, như có thể thấy trong bản demo ở đây .


3
Tôi đã có một giáo sư trở lại khi ai sẽ lấy điểm bài tập về nhà hoặc bài kiểm tra của bạn nếu bạn đặt dấu gạch chéo qua một chữ số 0 vì số 0 không phải là tập hợp rỗng. Ông sẽ đánh giá cao câu trả lời này.
Michael Burr

15

Phông chữ của bạn thật tệ, làm thế nào một trình phân tích cú pháp có thể đọc được nó? Tham gia một khóa học thư pháp.


13

Trình biên dịch của bạn đang mong đợi ASCII , nhưng chương trình đó rõ ràng được viết bằng EBCDIC .


Lần cuối tôi nghe C ++ không chỉ định rằng các chương trình phải được viết bằng ASCII, UTF-8 hoặc bất cứ điều gì khác.
Adrian Ratnapala

8

Bạn đang cố gắng biên dịch một hình ảnh.

Nhập những gì bạn đã viết tay vào một tài liệu có tên main.cpp, chạy tệp đó thông qua trình biên dịch của bạn, sau đó chạy tệp đầu ra.


23
Kiểm tra ngày trên PC của bạn.
James P.

14
Haha, nhưng cuối cùng tôi đã tìm thấy một câu hỏi dễ mà tôi có thể trả lời!
Cody Grey

10
Điều này thật ngốc nghếch. Chúng ta đều biết trình biên dịch sẽ tối ưu hóa khoảng trắng, chỉ để lại không gian đen bị nén nặng, đó là tất cả những gì và sẽ nén xuống nhị phân 1 sẽ bị trả về do lỗi. Mã cần được viết bằng cách sử dụng màu trắng sẽ biên dịch thành 0 và không trả về lỗi.
Tin Man

7

Bạn cần xác định độ chính xác của đầu ra trước dấu hai chấm ngay trước dấu ngoặc cuối cùng . Vì đầu ra không phải là số, độ chính xác bằng không, vì vậy bạn cần điều này-

: 0}


5

thêm vào :

using namespace std;

ngay sau bao gồm: P: D


5
Tôi thích gõ ra stdtất cả các thời gian. Nhắc nhở tôi không nhận được một.
Mateen Ulhaq

5

Có vẻ như trình biên dịch của bạn không hỗ trợ các tệp trong mã hóa hmm ... như vậy. Hãy thử chuyển đổi nó sang ASCII.


5

Vấn đề nằm ở định nghĩa cú pháp, hãy thử sử dụng thước kẻ và la bàn để mô tả cổ điển hơn!

Chúc mừng


5

Hãy thử chuyển đổi giao diện đầu vào. C ++ hy vọng bàn phím sẽ được cắm vào máy tính của bạn chứ không phải máy quét. Có thể có các vấn đề xung đột ngoại vi ở đây. Tôi đã không kiểm tra trong Tiêu chuẩn ISO nếu giao diện nhập bàn phím là bắt buộc, nhưng điều đó đúng với tất cả các trình biên dịch tôi từng sử dụng. Nhưng có lẽ đầu vào máy quét hiện có sẵn trong C99 và trong trường hợp này, chương trình của bạn thực sự sẽ hoạt động. Nếu không, bạn sẽ phải chờ bản phát hành tiêu chuẩn tiếp theo và nâng cấp trình biên dịch.


5

Bạn có thể thử các màu khác nhau cho dấu ngoặc, có thể một số màu xanh lá cây hoặc đỏ sẽ giúp ích? Tôi nghĩ trình biên dịch của bạn không thể nhận ra mực đen: P


5

Tôi có phải là người duy nhất không thể nhận ra ký tự giữa 'trở về' và dấu chấm phẩy không? Đó có thể là nó!


4
Đó là một chữ cái in hoa O với một dòng đặc biệt mà chúng ta gọi là "đường kính", nói cho trình biên dịch sử dụng Thuật toán Vòng tròn Midpoint, rõ ràng. Tôi nghĩ bạn nên kiểm tra mắt
Mateen Ulhaq
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.