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é tập Code viết 23:35 ngày 30/09/2018

Sai sót có truyền thống và hệ thống em ạ.

Tao Không Ngu. viết 23:38 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

Ngô Doãn Tuấn viết 23:44 ngày 30/09/2018

Mình thường thấy học C nhầm sang C++ hơn.

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 @@

The Wind viết 23:47 ngày 30/09/2018

Mình xem sách dạy C++ .Đọc 1 hồi để ý mới biết là mình đang đọc C

Pham Van Hai viết 23:35 ngày 30/09/2018

Vì tư tưởng của mọi người thường hiểu là C là phần con của C++

Lê Anh Tuấn viết 23:50 ngày 30/09/2018

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ứ :’(

Bé tập Code viết 23:50 ngày 30/09/2018

Phan dau C++ la c ma ban

Phần đầu C++ là cái gì ??? Tại sao nó lại là C ???

Tao Không Ngu. viết 23:41 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

viết 23:41 ngày 30/09/2018

“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é tập Code viết 23:47 ngày 30/09/2018

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ính static.

  • 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áo char a rồi lúc build vẫn dùng được biến a, 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ến a dẫn đến nó pass được cái đoạn linker và không bị báo lỗi redefine. 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.

      #ifdef __cplusplus
      extern "C" {
      #endif
    
  • 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ểu bool 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ến bool bằng 2 thì nó là bằng 2 và nó khác cả TrueFalse. C++ có kiểu bool 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ì.

Tao Không Ngu. viết 23:44 ngày 30/09/2018

This post was flagged by the community and is temporarily hidden.

viết 23:37 ngày 30/09/2018

C++ có thể làm điều này ko?

#include <stdio.h>

void print0(int n)
{
    char s[n+1]; // <--------------
    int i = 0;
    while (i < n) s[i++] = '0';
    s[n] = '\0';
    printf("%s\n", s);
}

int main(void)
{
    int n;
    scanf("%d", &n);
    print0(n);
}

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.

Bài liên quan
0