Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 23 kết quả

Đề tài: Tại sao dùng Macro

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    3

    Mặc định Tại sao dùng Macro

    Mình thắc mắc không hiểu tại sao người ta dùng khai báo #define kich_thuoc 5 để dùng tên lệnh (kich_thuoc) thay cho (5) nhìn dài dòng hơn.
    for(i=0;i<=kich_thuoc-1;i++)
    sao không viết
    for(i=0;i<5;i++)
    cho ngắn gọn

    #include<iostream.h>
    #define kich_thuoc 5
    main()
    {
    int x[kich_thuoc];
    int i;
    cout<<"Hay nhap vao cac phan tu tren cung mot dong\n";
    for(i=0;i<=kich_thuoc-1;i++)
    {
    cin>>x[i];
    }
    //viet lai cac gia tri cua mang len man hinh
    cout<<"\nMang x gom co cac phan tu";
    for(i=0;i<kich_thuoc;i++)
    cout<<"\nx["<<i<<"]="<<x[i];
    }

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Bạn tưởng tượng thế này
    Nếu bạn thay = cách của bạn là dùng số 5.
    Đến lúc bạn có nhu cầu : THôi, số 5 chán quá, ko thích dùng nữa. Ta thích số 10.
    Vậy bạn phải thay đổi nhièu chỗ, phải tìm đến những nơi có liên quan đến số 5 đó để đổi thành 10

    Trong khi nếu dùng #define kich_thuoc 5 . Thì bạn cihr việc lên define lại nó 10 là xong

    Việc code xong rồi , lúc khác nhìn lại thì phát sinh các miền giá trị khác(lớn hơn hoặc bé hơn) là điều thường xảy ra. Vậy ta làm cái đó cho nó vừa logic lại vừa dễ chỉnh sửa
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    11 2010
    Bài viết
    589

    Để code dễ đọc hơn, người ta đọc vào không thể biết được con số 5 của bạn có ý nghĩa gì.
    Dễ dàng sửa đổi. Giả sử bạn cần kich thuoc = 6 thì phải sửa bao nhiêu chỗ ?
    Hiện nay đa số các trình soạn thảo đều có chức năng tự động điền mã, nên cũng không tốn công gõ hơn là bao. Bù lại là đỡ công vắt óc nghĩ ra số 5 ở đâu ra.

  4. #4
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Để cho code dễ đọc hơn bạn à.
    Forum học lập trình ASM: Assembly Việt

  5. #5
    Ngày gia nhập
    04 2011
    Bài viết
    3

    Mình đã hiểu cảm ơn mọi người

  6. #6
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    Mặc định Tại sao dùng Macro

    có ai phân biệt được biến khác macro(loại dùng để lưu giá trị) ở chỗ nào không ?. Tại sao ở trên không dùng biến kich_thuoc mà phải dùng macro kich_thuoc.

    mình không nghĩ dùng macro để "sau này sửa dễ hơn", nếu thế, tại sao không dùng biến, biến mạnh hơn macro nhiều về mặt lưu trữ giá trị.

    mình thấy tác dụng thực sự của macro được phát huy khi dùng với tiền sử lý #if, #ifdef, #ifndef,...

  7. #7
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    MACRO sẽ được xử lý trước khi biên dịch. Cụ thể là trình biên dịch sẽ tìm và thay thế tất cả các MACRO tương ứng thành giá trị vốn đã định nghĩa sẵn. Sau đó nó mới biên dịch. Tương tự cho #if, #else... chúng được gọi là tiền chỉ thị (có nghĩa là xử lý trước khi biên dịch), trình biên dịch sẽ chọn đoạn code thích hợp (bạn set lệnh #if) khi biên dịch.
    Rẹt rẹt..

  8. #8
    Ngày gia nhập
    10 2011
    Bài viết
    552

    thay thế tất cả các MACRO tương ứng thành giá trị
    Ko phải thay thành "giá trị" đâu sim ới . Nó thay cái "chữ" vào thì đúng hơn
    Um Mani Padme Hum...!!

  9. #9
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Ko phải thay thành "giá trị" đâu sim ới . Nó thay cái "chữ" vào thì đúng hơn
    Đúng rồi. Ý mình là search & replace đó.
    Rẹt rẹt..

  10. #10
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    có ai phân biệt được biến khác macro(loại dùng để lưu giá trị) ở chỗ nào không ?. Tại sao ở trên không dùng biến kich_thuoc mà phải dùng macro kich_thuoc.

    mình không nghĩ dùng macro để "sau này sửa dễ hơn", nếu thế, tại sao không dùng biến, biến mạnh hơn macro nhiều về mặt lưu trữ giá trị.

    mình thấy tác dụng thực sự của macro được phát huy khi dùng với tiền sử lý #if, #ifdef, #ifndef,...

    Macro trị có hai mục đích:
    1. Định nghĩa constant cho NHIỀU modules trong cùng một chương trỉnh.
    2. Để sau này dễ sửa hơn

    Macro làm được một việc mà biến không thể làm được là macro có thể chứa trong header file và định nghĩa constant cho nhiều modules của project (biến chỉ có thể dùng extern để chứa trong header, rắc rối hơn nhiều, vả lại biến extern là biến toàn cục, trong hàm có thể bị khai báo chồng, tạo ra lỗi không thống nhất trị)

    Vi dụ bạn có một chương trình giải hệ phương trình bậc nhất n ẩn số.
    Một chương trình có giá trị có hơn chục modules chuyên tối ưu hóa đường đi đẻ giảm thiểu sai số (thử viết một chương trình giải 20x20 xem, nếu không có phấn tối ưu hóa thì kết quả sẽ ra sai bét)
    Làm việc với số thực thỉ bạn phải có số ép si lon để nhận định trị gần zê rô.
    Nếu bạn bỏ trị ép si lon đó vào làm biến trong từng modulew thì vừa mất công vừa không đồng nhất, sau này sửa phải lôi từng cái ra.
    Bỏ trị ây vào một file PROG_CONSTANTS.h rồi include vào các modules có phải là khỏe và tiện không?
    1. luôn luôn bảo đảm trị này là đồng nhất cho mọi nơi
    2. chỉ phải chỉnh sửa một nơi.

    tb. một module có nghĩa là một file c hoặc h

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

  1. Thủ thuật C Một vài macro hữu ích khi làm việc với bit
    Gửi bởi Tadius trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 06-03-2012, 10:28 AM
  2. Macro.
    Gửi bởi biennhatrang trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 05-10-2011, 12:46 PM
  3. Kỹ thuật C++ Tại sao không dùng được macro?
    Gửi bởi hquy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 12-09-2010, 03:35 PM
  4. Sử dụng MACRO trong ASM
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 01-01-2010, 09:55 AM
  5. [C/C++] lệnh gộp MACRO???
    Gửi bởi Nhuan_Trang_Only_Love trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 06-02-2007, 05:33 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