Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: How to define a constant value in C ++?

  1. #1
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Mặc định How to define a constant value in C ++?

    Hằng số
    Tương tự như biến số, hằng số cũng là một vùng nhớ lưu trữ dữ liệu. Tuy nhiên, giá trị đã gán cho hằng số là không thể thay đổi được trong quá trình thực hiện chương trình. Trong C++, ta có hai kiểu hằng số, hằng thường (literal constant) và hằng kí hiệu (symbol constant).

    Các hằng thường (literal constant)
    Một hằng thường là một giá trị cụ thể được đưa vào chương trình khi cần đến, ví dụ:
    C Code:
    1. int count = 20;
    2. float tax_rate = 0.28;
    Ta nói các giá trị 20, 0.28 kà các hằng thường. Trong hai câu lệnh trên, giá trị 20 và 0.28 lần lượt được đặt vào biến count và tax_rate. Chú ý một hằng có dấu chấm thập phân (0.28) còn hằng kia thì không. Những hằng có dấu chấm thập phân ta gọi là hằng dấu chấm động (hằng số thực), còn ngược lại là hằng nguyên.

    Một hằng thường có dấu chấm thập phân là một hằng dấu chấm động và được trình biên dịch xem như có độ chính xác kép (chính xác đến 19 số lẻ). Các hằng dấu chấm động có thể được viết ở các dạng quy ước thập phân chuẩn, ví dụ:
    C Code:
    1. 123.456
    2. 0.019
    3. 100.
    Chú ý hằng thứ 3 (100.), số 100 được đi kèm 1 dấu chấm thập phân, mặc dù nó là một số nguyên (tức là không có phần lẻ). Dấu chấm thập phân này làm cho trình biên dịch hiểu đây là một giá trị có độ chính xác kép. Nếu không có dấu thập phân, trình biên dịch sẽ hiểu đó là một số nguyên.

    Những hằng số dấu chấm động có thể viết theo ký hiệu khoa học, ví dụ:
    Example Code:
    1. 1.23E2 = 1.23 * (10 ^ 2) = 123
    2. 4.08e6 = 4.08 * (10 ^ 6) = 4,080,000
    3. 0.85e-4 = 0.85 * (10 ^ -4) = 0.000085
    Một hằng số không có dấu chấm thập phân đi theo sẽ được hiểu như một số nguyên. Một số nguyên có thể được viết một trong ba dạng quy ước như sau:
    • Một hằng số bắt đầu với bất kỳ một kí số nào khác 0 sẽ được chuyển thành một số nguyên thập phân (tức là, hệ cơ số 10). Các hằng số thập phân có thể chứa các ký số 0-9 và có dấu âm hoặc dương ở trước (Nếu không có ghi dấu, ta sẽ hiểu ngầm là số dương).
    • Một hằng số bắt đầu với ky số 0 sẽ được chuyển thành một số nguyên hệ bát phân (hệ cơ số tám). Các hằng số bát phân có thể chứa các ký số 0-7 và có dấu âm hoặc dương ở trước
    • Một hằng số bắt đầu với 0x hoặc 0X sẽ được chuyển thành hằng thập lục phân (hệ cơ số mười sáu). Các hằng thập lục phân có thể chứa các ký số 0-9, các kí tự a-f, A-F, và có dấu âm hoặc dương ở phía trước.

    Các hằng thường, giống như các biến, được xem là có kiểu dữ liệu cụ thể. Theo mặc định, các hằng thường kiểu nguyên có kiểu là int. Tuy nhiên, ta cũng có thể buộc nó là kiểu không dấu bằng cách thêm ký tự 'u' hoặc kiểu long bằng cách thêm kí tự 'L'
    C Code:
    1. 75         // int
    2. 75u        // unsigned int
    3. 75l        // long
    4. 75uL       // unsigned long
    Trong cả hai trường hợp, hậu tố không phân biệt hoa thường.

    Các hằng ký hiệu (symbol constant)
    Một hằng ký hiệu là một hằng được gán cho một cái tên trong chương trình. Giống như một hằng thường, một hằng ký hiệu không thể thay đổi giá trị trong quá trình thực hiên trương trình.
    C++ có hai phương pháp để định nghĩa hằng ký hiệu, sử dụng chỉ thị #define và sử dụng từ khoá const. Chỉ thị #define là một trong những chỉ thị tiền xử lý của C/C++, chỉ thị #define được sử dụng như sau:
    • #define TÊN_HẰNG_SỐ hằng số

    Dòng chương trình này sẽ tạo ra một hằng có tên là TÊN_HẰNG_SỐ với giá trị của "hằng số". Thông thường ta nên đặt tên hằng ở dạng chữ hoa. Điều này giúp phân biệt một tên hằng với một tên biến (ở dạng chữ thường), ví dụ:
    C Code:
    1. #define PI 3.14159
    Chú ý là các dòng #define không kết thúc bởi dấu chấm phẩy (dấu ';'). Bạn có thể đặt chỉ thị #define ở bất cứ chỗ nào trong chương trình, và tác dụng của nó sẽ bắt đầu từ vị trí đó xuống hết chương trình (phần chương trình ở trên chỉ thị #define sẽ không chịu ảnh hưởng của chỉ thị này). Tuy nhiên, thường thì các chỉ thị #define sẽ được nhóm lại ở phần đầu chương trình, trước hàm main().

    Cách thứ hai để định nghĩa một hằng ký hiệu là sử dụng từ khoá const. Một biến được khai báo là const sẽ không thể thay đổi giá trị trong quá trình thực hiện chương trình - nó chỉ được khởi tạo lúc khai báo, ví dụ:
    C Code:
    1. const int count = 100;
    2. count = 200;
    đoạn chương trình này nhằm mục đích minh hoạ việc gán lại giá trị cho biến count đã được khai báo là const. Khi biên dịch bạn sẽ nhận được thông báo lỗi "Cannot modify a constant object" - Tuỳ trình biên dịch mà thông báo lỗi sẽ hơi khác nhau.

    Chú ý: Khi khai báo một hằng bằng #define ta không biết được kiểu của nó, hơn nữa, #define là một chỉ thị tiền xử lý do đó trình biên dịch sẽ không "thấy" được hằng khai báo theo cách này. Nói chung, ta nên khai báo hằng bằng cách sử dụng const.

    Mở rộng thêm một chút về tiền xử lý #define.
    • Chỉ thị tiền xử lý #define được sử dụng với hai mục đích: tạo các hằng kí hiệu và tạo các macro.


    Các macro thay thế đơn giản dùng #define
    Ta đã biết về các macro thay thế thông qua việc khai báo các hằng kí hiệu, mặc dù ta không gọi là macro mà gọi là các hằng ký hiệu. Ta tạo một macro thay thế bằng cách sử dụng từ khoá #define để thay thế một đối tượng này bằng một đối tượng khác trong chương trình. Ví dụ, để thay thể text1 bởi text2, ta viết:
    • #define text1 text2

    Khi gặp chỉ thị này, bộ tiền xử lý sẽ duyệt toàn bộ chương trình nguồn và khi gặp text1, nó sẽ được thay bằng text2. Chỉ có một ngoại lệ, nếu text1 được bao trong dấu ngoặc kép " ", bộ xử lý sẽ bỏ qua đối tượng này.
    C Code:
    1. #define MAX 1000
    2. x = y * MAX;
    3. z = MAX - 12;
    chương trình nguồn được thay đổi sau khi qua bộ tiền xử lý"
    C Code:
    1. x = y * 1000;
    2. z = 1000 - 12;
    giống như là ta sử dụng trình soạn thảo để tìm MAX và thay thế bởi 1000 trong toàn bộ chương trình. Tất nhiên, chương trình nguồn của chúng ta không bị thay đổi sau khi được bộ tiền xử lý duyệt, thay vào đó, một tập tin tạm thời được tạo ra với các thay đổi như trên (tập tin này sẽ được xoá khi biên dịch xong). Chú ý, #define không chỉ được dùng để tạo các hằng kí hiệu, ta có thể viết:
    C++ Code:
    1. #define IN_SO(x) std::cout << (x)
    2. int so_nguyen = 125
    3. IN_SO(so_nguyen);
    sau khi được bộ tiền xử lý duyệt qua, câu lệnh trên chuyển thành:
    C++ Code:
    1. std::cout << (so_nguyen);
    Còn 1 điều nữa là, các macro sẽ hết tác dụng trong chương trình nếu gặp tiền chỉ thỉ "#undef" tương ứng. Ví dụ:
    C Code:
    1. #define MAX 1000
    2. x = y * MAX
    3. #undef MAX
    sau tiền xử lý "#undef MAX", "hằng kí hiệu" MAX không còn ý nghĩa. Ta thường dùng "#undef" trước khi dùng "#define" để tránh gặp re-define.

    P/s: Trong bài viết việc dùng tag code = c với mục đích nói rằng code này dùng được đối với cả hai trình biên dịch C và C++. Tag code = C++, có nghĩa là chỉ dùng được với trình biên dịch C++, do một số yêu cầu về thư viện, hàm...
    Đã được chỉnh sửa lần cuối bởi doicanhden : 25-12-2012 lúc 08:45 PM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

Các đề tài tương tự

  1. Bài tập C Hỏi về hàm define
    Gửi bởi so13cohoi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 25-12-2012, 08:19 PM
  2. Kỹ thuật C++ Cách nào để các ký tự tiếng việt có dấu cũng được define như các ký tự [a...z] bình thường?
    Gửi bởi truongnguyen89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 12-12-2012, 03:52 PM
  3. Giúp sửa lỗi Compiler Error Message: CS1010: Newline in constant.
    Gửi bởi Trace trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 12-09-2011, 03:55 PM
  4. #define, công dụng và cách thức của #define
    Gửi bởi 7261819 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 20-04-2009, 09:21 PM
  5. [C] Error: empty character constant
    Gửi bởi stephen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 11-10-2006, 02:10 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn