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

Đề tài: #eror vs #pragma tiền xử lí C++ trong VC++ là gì ?

  1. #1
    Ngày gia nhập
    07 2012
    Bài viết
    5

    Mặc định #eror vs #pragma tiền xử lí C++ trong VC++ là gì ?

    Mình có tìm hiểu về chỉ thị #error , #pragma , defined nhưng trong sách nói lơ mơ quá ( kể cả MSDN) ai có tài liệu nói chi tiết không hay hiểu có thể giải thích cho mình được không. Mình có thử sử dụng #error nhưng khi thay #if !defined( _cplusplus ) bằng #ifndef(_cplusplus) thì lại báo lỗi và để #error ra khỏi #if !defined thì k sử dụng dc.
    Code:
    #if !defined(__cplusplus)
    #error C++ compiler required.
    #endif

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

    Hình như không ai biết thì phải )) mình cũng thắc mắc cái #pragma mà tìm chưa ra

  3. #3
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    #error dùng để thông báo lỗi ra cửa sổ output khi dịch và chấm dứt quá trình dịch
    #error dùng khi 1 số predefined macro hoặc preprocessing không thỏa mãn yêu cầu của bạn
    bạn dùng ifndef như sau:

    C Code:
    1. #ifndef __cplusplus
    2. #error C++ compiler required.
    3. #endif

    #pragma là một chỉ thị cho compiler biết cách dịch chuơng trình theo một số "tùy chọn" đặc biệt. Cách xử lý chỉ thị này tùy thuộc vào từng compiler.

    Ví dụ :
    1.Bạn cần khai báo 1 struct trong C. Khi biên dịch, thông thường trình biên dịch sẽ làm tròn để kích thước struct là số chia hết cho 4, ( hoặc 2, hoặc 8, 16... tùy vào cấu hình build). Bạn muốn size của cấu trúc luôn luôn không đổi, đối với mọi trình biên dịch, mọi cấu hình. Bạn có thể khai báo như sau(cách này tương thích với cả VS và gcc):

    C Code:
    1. #pragma pack (push)
    2. #pragma pack (1)
    3. struct x{
    4. int a;
    5. int b;
    6. char c;};
    7. #pragma pack (pop)

    2.Bạn cần khai báo static link library khi gọi API của winsock. Bình thường, bạn sẽ vào properties của project và thêm thư viện. Tuy nhiên, bạn có thể dùng chỉ thị sau:
    C Code:
    1. #pragma comment (lib, "ws2_32.lib")

    3.Hoặc bạn muốn đặt lại entrypoint của chuơng trình là 1 hàm bạn tự viết, thay vì hàm main():
    C Code:
    1. #pragma comment (linker, "/ENTRY:StartHere")

  4. #4
    Ngày gia nhập
    12 2009
    Bài viết
    1

    Thanks, cái này có vẻ ít ngươi quan tâm chăng :-?

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    #error dùng để thông báo lỗi ra cửa sổ output khi dịch và chấm dứt quá trình dịch
    #error dùng khi 1 số predefined macro hoặc preprocessing không thỏa mãn yêu cầu của bạn
    bạn dùng ifndef như sau:

    C Code:
    1. #ifndef __cplusplus
    2. #error C++ compiler required.
    3. #endif

    #pragma là một chỉ thị cho compiler biết cách dịch chuơng trình theo một số "tùy chọn" đặc biệt. Cách xử lý chỉ thị này tùy thuộc vào từng compiler.

    Ví dụ :
    1.Bạn cần khai báo 1 struct trong C. Khi biên dịch, thông thường trình biên dịch sẽ làm tròn để kích thước struct là số chia hết cho 4, ( hoặc 2, hoặc 8, 16... tùy vào cấu hình build). Bạn muốn size của cấu trúc luôn luôn không đổi, đối với mọi trình biên dịch, mọi cấu hình. Bạn có thể khai báo như sau(cách này tương thích với cả VS và gcc):

    C Code:
    1. #pragma pack (push)
    2. #pragma pack (1)
    3. struct x{
    4. int a;
    5. int b;
    6. char c;};
    7. #pragma pack (pop)

    2.Bạn cần khai báo static link library khi gọi API của winsock. Bình thường, bạn sẽ vào properties của project và thêm thư viện. Tuy nhiên, bạn có thể dùng chỉ thị sau:
    C Code:
    1. #pragma comment (lib, "ws2_32.lib")

    3.Hoặc bạn muốn đặt lại entrypoint của chuơng trình là 1 hàm bạn tự viết, thay vì hàm main():
    C Code:
    1. #pragma comment (linker, "/ENTRY:StartHere")

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

    nhìn thấy hoài mà khống biết nay mới rõ nó là gì, cảm ơn vì bài viết !

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

  1. Sử dụng #pragma với data_seg,comment trong lập trình DLL như thế nào?
    Gửi bởi vitaminC1 trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 1
    Bài viết cuối: 24-05-2013, 09:36 AM
  2. lỗi C:\dev-cpp\Mekefile.win [Build Eror][project1.exe]Error1
    Gửi bởi xitrum2601 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 09-09-2011, 10:52 PM
  3. Lệnh #pragma mark - View lifecycle trong Xcode Iphone có tác dụng gì?
    Gửi bởi Iphone4 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 08-08-2011, 11:55 AM
  4. #pragma bss_seg("DLLShare") Or #pragma data_seg(".shared")
    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: 24-10-2009, 11:08 AM
  5. Dùng #pragma?
    Gửi bởi tmt1001 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 21-11-2008, 12:34 AM

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