30/09/2018, 21:33
Vấn đề lẫn lộn giữa c và c++
tại sao em thấy mọi người day c++ mà toàn sử thư viện, hàm của c.
Bài liên quan
tại sao em thấy mọi người day c++ mà toàn sử thư viện, hàm của c.
Sai sót có truyền thống và hệ thống em ạ.
This post was flagged by the community and is temporarily hidden.
Chính xác bạn
Trường mình nhiều giáo viên dạy lẫn lộn c sang c++.
Nhất là phần sử dụng tham chiếu và đặt tên mở rộng @@
Mình xem sách dạy C++ .Đọc 1 hồi để ý mới biết là mình đang đọc C
Vì tư tưởng của mọi người thường hiểu là C là phần con của C++
Cô dạy OOP C++ của mình còn không biết References chỉ C++ mới có, bả cứ nghĩ C cũng có mới đau chứ :’(
Phần đầu C++ là cái gì ??? Tại sao nó lại là C ???
This post was flagged by the community and is temporarily hidden.
“phần đầu” C++ chắc là khai báo biến, sử dụng vòng lặp, sử dụng if else switch case v.v… Nói chung phần đầu của Java cũng là C. Phần đầu của C# cũng là C cả thôi. Phần đầu của ngôn ngữ nào chả là C
Bạn là minh chứng sống cho việc tại sao mà bạn @Hello_World1 thấy mọi người day c++ mà toàn sử thư viện, hàm của c.
Mình không có ý đả kích gì bạn hết bởi như mình nói việc này cũng có tính hệ thống, vậy nên bao giờ thấy mình cũng chẳng buồn nói, vì nó giống tôn giáo và chính trị vậy, đi khác lại đám đông thì người ta sẽ nhào nhào bay vào xả bạn.
C++ và C nó dùng 2 Compiler khác nhau vậy nên sẽ có vô số đặc tính khác nhau của 2 chương trình. Không bàn đến mấy cái OOP hay Generic Programming mà C++ có mà C không có. Nó khác nhau từ những cái rất nhỏ nhặt cơ bản mà bạn cho là giống nhau, chẳng hạn:
const
trong C bạn định nghĩa ở một file source thì các file khác cứ khai báo là dùng được, bạn không làm vậy trong C++ được vìconst
trong C++ nó có đặc tínhstatic
.C++ có ODR, nên không có chuyện source 1 bạn khai báo
int a
source 2 bạn khai báochar a
rồi lúc build vẫn dùng được biếna
, nhưng trong C thì nó cho vì compiler của nó tự đoán kiểu và tạo một cái symbol tạm cho biếna
dẫn đến nó pass được cái đoạn linker và không bị báo lỗiredefine
. Vậy nên khi dùng code C trong C++ người ta phải bỏ vào cái này để lấy linkage cho đúng và không bị lỗi chứ không phải thích thì bỏ vào như bạn nói.enum
,union
,struct
bạn muốn khai báo thì phải có kèm những từ khóa đó trong C, còn C++ thì không.Dùng
bool
trong C rất cực nhọc vì nếu compiler đó sử dụng chuẩn trước C99 (như Visual Studio chẳng hạn) thì bạn không có kiểubool
và phải tự định nghĩa, và nếu tự định nghĩa thì nó sẽ bị lỗi sót tràn, tức là bạn gán một biếnbool
bằng2
thì nó là bằng2
và nó khác cảTrue
vàFalse
. C++ có kiểubool
chuẩn, không bị chuyện này.…
Nói tóm lại là rất nhiều mình kể không hết và cũng không nhớ vì nó quá li ti. Bạn search google thì chắc cũng ra một đống nhưng mình kể ra những cái từ kinh nghiệm của mình cho bạn thấy.
Nói ngắn gọn một câu nếu bạn nhìn vào một project C++ thực sự thì nó khác hẳn một project C thực sự, ngay từ cái nhìn đầu tiên chứ chưa cần đi vào chi tiết vậy nên khỏi phải bàn cãi về việc bọn nó là 2 cái ngôn ngữ khác nhau.
Sorry vì nói hơi nhiều do cuối tuần đi nhậu về có hơi men. Bạn thấy không đúng thì cứ giữ tư tưởng của bạn nhé, đừng có theo những gì mình nói : v. Nhưng mình khuyên cả các bạn khác là nếu cái căn bản là phân biệt C và C++ cũng chưa xong thì đừng mong muốn tiến xa với 2 cái ngôn ngữ này nữa, bạn lên stackoverflow đặt một câu hỏi và tag cả 2 cái C và C++ vào xem, sẽ thấy bọn dev nước ngoài nó nói gì.
This post was flagged by the community and is temporarily hidden.
C++ có thể làm điều này ko?
cái này gọi là variable length array. Khi kết thúc hàm
print0
thìs
cũng được giải phóng, nên vẫn ko thể xài cái này để trả về ví dụ 1 chuỗi ghép từ 2 chuỗi mà vẫn phải cấp phát động. C++ ko cho phép variable length array (vì đã có std::vector hoặc std::string) nhưng 1 số compiler vẫn cho phép.