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

Đề tài: [ Solved ]Vấn đề thắc mắc với lệnh macro !

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    78

    Mặc định [ Solved ]Vấn đề thắc mắc với lệnh macro !

    Em đã xem cách dùng header tự tạo và liên kết các file .c với nhau bằng header.
    Trong đó có phần nói về lệnh macro chống nạp trùng file header đã được nạp.
    vd:

    Code:
    #ifndef STRING_H
    #define STRING_H
    ...
    #endif
    --> em thắc mắc không biết có phải rằng tên file header cũng được xem như một macro (STRING_H) ? Khi được include vào thì tên file .h tự động được xem như một macro ?

    Ngoài ra em có thấy một số người code như thế này

    Code:
    #ifndef _STRING_H_
    #define _STRING_H_
    ...
    #endif
    hay

    Code:
    #ifndef __ABCD_H__
    #define __ABCD_H__
    ...
    #endif
    Không biết _STRING_H_ có khác gì STRING_H ? Nhiều gạch dưới "_" có gì khác biệt không ?

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Oh đây cũng là vấn đề mà em thắc mắc. Từ trước đến giờ tham khảo qua nhiều code thấy có người ghi là STRING_H, có người lại ghi là _STRING_H_, không biết có điểm gì khác nhau không nhỉ ?

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Cái chuỗi đó giống như một dạng ID vậy, muốn ghi chó, mèo, gà, vịt gì cũng được, miễn sao là giữa các file .h không có chuỗi nào trùng nhau.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Mới phát hiện ra một chi tiết nho nhỏ
    Các file header của MinGW hơi khác với GCC (dù MinGW từ GCC mà ra)

    Vd: string.h hay stdio.h
    MinGW: _STRING_H_ , _STDIO_H_
    GCC: _STRING_H , _STDIO_H

    Thảo nào có một số project dịch với MinGW cho một kết quả, đem qua dịch với GCC thì lại cho kết quả khác biệt

  5. #5
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    Mấy cái đó thick đặt là gì cũng được.
    Miễn là các file header khác nhau đặt tên khác nhau là được.
    Sau này mà bạn thik đánh dấu chương trình của mình thì bạn cũng có thể đặt là:
    _Hok_bik_zi_STRING_H ,_Hok_bik_zi_STUDIO_H
    cũng được.
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    UIT
    Bài viết
    129

    Mặc định [ Solved ]Vấn đề thắc mắc với lệnh macro !

    Trích dẫn Nguyên bản được gửi bởi thienthan34 Xem bài viết
    Mấy cái đó thick đặt là gì cũng được.
    Miễn là các file header khác nhau đặt tên khác nhau là được.
    Sau này mà bạn thik đánh dấu chương trình của mình thì bạn cũng có thể đặt là:
    _Hok_bik_zi_STRING_H ,_Hok_bik_zi_STUDIO_H
    cũng được.
    Thực ra thì tớ hơi thắc mắc về identifier của các header chuẩn thôi, chứ mấy cái header tự tạo thì ko có gì
    Tại vừa rồi tớ có làm một project có sử dụng vài conditional directives, sử dụng Dev-C++ sau đó port qua linux dùng GCC. Mặc dù viết đúng ISO Standard nhưng khi dịch trên GCC kết quả lại sai đi, tìm hiểu mãi thì ra các identifier của MinGW nó hơi khác GCC nên sử dụng conditional directives nó hơi bị sai đi :((

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Thật ra thì mấy cái tên đó ko có gì đặc biệt cả. Chỉ là định danh đặt sẵn thôi.
    Nó thêm _ để khỏi bị người khác xài thôi.

    khi mình include stdio.h vào thì mặc định sẽ định danh ra 1 cái tên là _STRING_H,

    chương trình dịch dùng các cái tên này để phân biệt các file mình đã gộp vào tránh trường hợp gộp 1 file 2 lần.

    ví dụ stdio.h khi gộp nó vào bạn sẽ thấy nó gộp 1 file nữa
    #include <_defs.h>

    trong conio.h cũng có
    #include <_defs.h>

    !!

    vậy làm sao để ko include file đó 2 lần ?


    #if !defined(__DEFS_H) // nếu chưa có định danh__DEFS_H
    #include <_defs.h> // thì include file này vào
    #endif // kết thúc tiền xử lý #if lần nhất
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  8. #8
    Ngày gia nhập
    11 2008
    Bài viết
    78

    Oh cảm ơn bác nhiều, em hiểu rồi. Em xin hỏi thêm câu nữa.
    Nếu một file bị include vào nhiều hơn 1 lần thì có gây ra lỗi gì không ?

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi howto Xem bài viết
    Oh cảm ơn bác nhiều, em hiểu rồi. Em xin hỏi thêm câu nữa.
    Nếu một file bị include vào nhiều hơn 1 lần thì có gây ra lỗi gì không ?
    cái đó thì tùy bạn à.
    bạn hãy tưởng tượng như thế này : Khi include 1 file nào đó vào chẳng qua là đem tất cả các dòng code ở trong đó vất vào trong bài của mình ! ok!

    như thế thì có lỗi hay ko thì tùy thuộc vào code

    ví dụ đơn giản nhất mình có file trống ko => include chục lần chả sao cả


    ví dụ 2: trong file mình có dòng khai báo biến toàn cục int i;
    include 2 lần vào chắc chắn là sẽ báo lỗi rồi !!!!!


    ok??
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  10. #10
    Ngày gia nhập
    11 2008
    Bài viết
    78

    Ok ! Đã thông suốt

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. Lập trình C++ Tại sao dùng Macro
    Gửi bởi ducthanh150792 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 22
    Bài viết cuối: 20-01-2012, 07:04 PM
  3. Lập trình C++ Thắc mắc nhỏ về các Macro trong <stdarg.h>!
    Gửi bởi lytieubinh_269 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 27-12-2011, 08:20 PM
  4. 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
  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