Tên trong C là sao?

Tên được dùng để xác định các đại
lượng khác nhau trong chương trình
như tên hằng, tên biến, tên hàm, …

Quy tắc: Tên phải là một dãy các ký tự
bắt đầu bằng chữ cái hoặc ký tự gạch
dưới, theo sau là chữ cái, chữ số hoặc
ký tự gạch dưới.
Ví dụ:

Tên đúng:

_abc, delta_1

Tên sai:

1xyz (vì bắt đầu bằng chữ số)

A#B (vì có dấu #)

al pha (vì có khoảng trắng)
Em có đọc một tài liệu về C và đoạn trên là đoạn mà em không hiểu? Tên trong hàm, biến, hằng không được đặt bắt đầu bằng chữ số? Nhưng khi vào Visual Studio thì em vẫn viết được
printf(“1caunoi”); . Chẳng phải 1caunoi là 1 biến hay sao mà khi em đặt 1caunoi thì nó vẫn debug được vào không báo lỗi? Có bác nào đưa em ví dụ sai và đúng trong 1 hàm, biến và hằng được kh ạ? Em xin cảm ơn các bác!

“1caunoi” là string literal nên không phải.

Bác có thể đưa em một vài ví dụ đúng và sai được kh ạ? Em xin cảm ơn trước

Thực ra có thêm quy tắc nữa là những tên bắt đầu bằng _ (VS) hay __ đều có thể bị reserved cho compiler.

Còn “1caunoi” không phải là tên, vả lại nếu giải thích thì nó nằm giữa hai dấu ngoặc kép nên chẳng sao cả.

Sorry bác :sweat: Em vẫn chưa hiểu lắm :(((

Quy tắc đặt tên biến, tên hàm, tên hằng v.v

  1. Chỉ được đặt tên bằng chữ cái a->z, A->Z số 0->9 và đấu “_”
  2. Tên biến, tên hàm v.v chỉ được bắt đầu bằng chữ cái a->z, A->Z và dấu “_”
  3. Tên biến, tên hàm v.v có phân biệt chữ hoa chữ thường
    Đây là những cái quy tắc khi đặt tên.
    Nếu đặt tên sai sẽ lỗi ngay từ lúc biên dịch chương trình

printf(“1caunoi”); hàm này xuất ra chuỗi “1cauhoi” ra màn hình. “1cauhoi” là text bình thường, không phải tên biến, tên hàm, tên hằng v.v

1 Like

chẳng hạn giờ em đặt int 1caunoi; thì kh được đúng kh ạ? vì nó là 1 biến?

Cách tốt nhất vẫn là thực hành: Mở IDE lên gõ độ 10 cái định danh biên dịch, nếu sai đọc lỗi tự sửa sẽ nhớ :slight_smile:

1 Like

Không được. Biến phải bắt đầu bằng kí tự chữ, hoặc kí tự _. Có thể 1 số ide không cho phép dùng _ ở đầu biến.

Xin đính chính 1 ý nhỏ việc cho phép dấu “_” hay không không phải do ide quyết định mà là compiler quyết định.
IDE chỉ giúp cho biên tập mã nguồn thôi

2 Likes

Đôi khi IDE quyết định cho phép đặt tên biến.
Ví dụ trong VS, bác có thể thoải mái đặt tên biến, tên hàm, tên namespace… bằng tiếng Việt, nhưng nhiều IDE khác thì không.

Không hẳn như vây. vì VS cái IDE có nó tương thích với compiler luôn nên IDE bắt lỗi sẳn và hiện luôn cho dev dễ sửa. Vì nó biết là nếu cho compiler chạy cũng lỗi y như vậy.
Về cơ bàn có thể compile mà chỉ cần dùng command line như sau:

  1. VD: tạo 1 file hello.cpp bằng notepad và lưu ở đường dẫn C:\Users\ …\Desktop như sau:

    #include <stdio.h>
    #include <conio.h>

    int main()
    {
    printf("%s\n", “Hello word”);
    getch();
    return 1;
    }

  2. Mở tool Developer Command Prompt for VS 2017

  3. dùng lệnh cd di chuyển đến thư muc C:\Users\ …\Desktop

  4. dùng lệnh cl C:\Users\ …\Desktop\hello.cpp

*Như vây la đã có thể compile 1 app c++ không cần mở VS làm gi cả

Vậy cho mình hỏi
trong một số IDE online mình thử thì không cho đặt tên biến kiểu int Biến1 mà chỉ có thể là int Bien1, còn VS thì cho phép, như vậy cái đó là do compiler hay do text editor vậy?

Mà đặt kiểu đó chắc cũng ko được xài vì commit lên xong người ta pull về biên dịch ko được thì auto gạch :smiley:

Để mình giải thích tại sao VS lai có thể cho phép đặt tên biến bằng tiếng việt có dấu:
vấn đề nằm ở Encoding của file (*.cpp)

  1. nếu file đó được save dưới EncodingUTF-8- BOM thì VS có để biên dịch với tên biến bằng tiếng việt có dấu ngược lai thì VS sẽ báo lỗi. Ban có để kiểm tra Encoding của file bằng tool nodepad++ ở menu có mục Encoding. Ban cũng có thể thử bằng cách save file đó bằng Encoding khác xem biên dịch dược không.
  2. những compiler trên mạng thì mình không thể biết được nó dùng compiler gì và file đem di compile có Encoding là gì? nên việc lỗi là có thể xãy ra
  3. Việc đăt tên biến băng tiếng việt có dấu là hoàn toàn sai theo tiêu chuẩn của C/C++ nhé. compiler cho phép biên dịch ko có nghĩa là nó đúng đâu
2 Likes

À, việc save file dưới encode không chứa Unicode thì ký tự đó sẽ tự bị chuyển thành ‘?’ hoặc mấy cái như trái tim, mặt cười… trong bảng ASCII cho nên khi biên dịch sẽ gây lỗi. Còn Intellisense thì không báo lỗi với ký tự Unicode. Mình biết nó không chuẩn, mình chỉ thắc mắc là việc không chấp nhận ký tự Unicode trong tên biến là do compiler hay do text editor thôi.
Khi code thì mình cũng không đặt tên như vậy bao giờ, chỉ là mình có lần đặt thử và bất ngờ với việc nó chạy được. Tiện có topic này hỏi luôn í mà.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?