VC - câu hỏi khó!!

  • Thread starter ahmed MikeVertx
  • Start date
A

ahmed MikeVertx

Guest
Nếu sử dụng bất kỳ một trong VC để tạo một lớp mới, sẽ tìm thấy một số những điều kỳ lạ bắt đầu bằng văn bản trong tập tin/ / CEquParser.h: giao diện cho lớp CEquParser./ /////////////////////////////////////////////////// ////////////////////# Nếu! Quy định (AFX_CEQUPARSER_H__ACCB3DAE_4F18_4E1B_B084_CEF3AB97079A__INCLUDED_)# Define AFX_CEQUPARSER_H__ACCB3DAE_4F18_4E1B_B084_CEF3AB97079A__INCLUDED_# Nếu _MSC_VER> 1000# Pragma một lần# Endif / / _MSC_VER> 1000lớp CEquParser
(
công khai:
CEquParser ();
ảo ~ CEquParser ();

);
[/color][Color = nâu] # endif / /! Quy định (AFX_CEQUPARSER_H__ACCB3DAE_4F18_4E1B_B084_CEF3AB97079A__INCLUDED_)
[/ color]một trong bất kỳ có ý tưởng gì vậy??và Tại sao

 
Xấu hổ về bạn nếu bạn không biết các ifndef # đầu tiên (hoặc # nếu! Quy định (...)) / # define báo cáo

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Chớp mắt" border="0" />

.Nhưng bạn muốn tìm hiểu những gì họ có nghĩa là như vậy đó là một điều GOOD!

Họ là một phải trong tập tin tiêu đề!

Đó là để bảo vệ các tập tin C cho inclusions nhiều của các tập tin header.

Ví dụ:

--- Loại. H ---
typedef unsigned char uint8
------------------

--- SerialPort. H ---
# Include "types.h"
-----------------

--- Ổ cắm. H ---
# Include "types.h"
------------------

--- SocketToSerial. Cpp ---
# Include "serialPort.h"
# Include "sockets.h"
/ / Ở đây bạn sẽ nhận được báo lỗi rằng các loại uint8 được định nghĩa nhiều lần
---------------------------

Và khi bạn sử dụng các báo cáo bảo vệ, sự bao gồm thứ hai của types.h sẽ không được thực hiện trong tập tin C.Lần đầu tiên nó đạt đến # ifndef nó thấy rằng biến này Preprocessor chưa được định nghĩa như vậy nó đi vào và đánh giá các mã giữa ifndef # # endif đầu tiên và ở dưới cùng của tập tin (và định nghĩa các biến Preprocessor. Thứ hai thời gian nó muốn bao gồm types.h (từ sockets.h) nó sẽ thấy rằng biến Preprocessor đã được định nghĩa như vậy nó sẽ bỏ qua types.h lần thứ hai được bao gồm một nơi nào đó có. Vì vậy, (tất cả mọi thứ được bao gồm một lần và bạn không chú ý đến vấn đề đó!

Tên của biến số là miễn phí.Tôi sử dụng tên hợp lý phần lớn thời gian (như tên của lớp với _h_ phía sau nó .) Microsoft Visual C sử dụng định danh duy nhất mà không có bất kỳ meanig hợp lý (nó chỉ là duy nhất

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Chớp mắt" border="0" />

).Bạn đang tự do lựa chọn bất cứ điều gì bạn thích (miễn là mỗi tập tin tiêu đề trong dự án của bạn sử dụng một tên khác nhau)Thứ hai
# Nếu _MSC_VER> 1000
# Pragma một lần
# Endif / / _MSC_VER> 1000

có vẻ là phiên bản microsoft của bảo vệ
từ MSDN:
# Pragma một lần
Chỉ định rằng các tập tin, trong đó pragma cư trú, sẽ được bao gồm (mở) chỉ một lần bởi trình biên dịch trong xây dựng.Một sử dụng chung cho pragma này là sau đây:

Tôi chắc rằng nó có đó là những điều tốt đẹp quá.Nó có vẻ là dư thừa.(Mặc dù tôi nghĩ rằng nó có thể tăng tốc độ quá trình xây dựng của các dự án lớn.)

 
Tôi biết ifndef # (hoặc # nếu! Quy định (...)) / # define báo cáo.nhưng tôi nghĩ có lẽ bất kỳ một điều duy nhất biết như những gì nó có nghĩa là .. làm thế nào trình biên dịch tạo ra??

 
Anh xin lỗi về 'xấu hổ về bạn.Nó chỉ là tôi đã biết rất nhiều "lập trình" (<- Thông báo có dấu ngoặc kép), người chỉ nói: "Tôi không biết điều này, vì vậy tôi gỡ bỏ nó!".Vì vậy, nó đã không được directect ở người của bạn, xin vui lòng không được xúc phạm bởi nó!

Lời giải thích ngắn từ trên:

Trình tự này:
# Ifndef TheUniqueVariableGuardingTheMultipleInclusionOfThisHeaderFile_h_
# Define TheUniqueVariableGuardingTheMultipleInclusionOfThisHeaderFile_h_
...
# Endif / / TheUniqueVariableGuardingTheMultipleInclusionOfThisHeaderFile_h_

được sử dụng để bảo vệ một tập tin header bị bao gồm nhiều lần trong một C / C tập tin trước khi biên dịch.
Như bạn có thể biết một typedef chỉ có thể được định nghĩa một lần trong khi biên dịch một C / C file.Khi một tập tin tiêu đề (trong đó có một typedef) được bao gồm hai lần trong một C / C tập tin trình biên dịch sẽ tạo ra một lỗi mà typedef được định nghĩa trước.
Sử dụng các báo cáo bảo vệ, điều này sẽ không xảy ra!

Đó là lý do để sử dụng chúng!Bạn nên sử dụng chúng bởi vì nó sẽ làm cho mã hóa một phân bổ cho dự án lớn dễ dàng hơn!Để giải thích những gì nó thực hiện chính xác tôi sẽ sử dụng ví dụ từ bài trước của tôi.Trước khi trình biên dịch biên dịch socketToSerial.cpp, tiền xử lý là chạy.Điều này sẽ tạo ra một socketToSerial.cpp mới với tiền xử lý tất cả các lệnh xử lý.
Các tập tin mới sẽ như thế này:
--- SocketToSerial. Cpp ---
typedef unsigned char uint8 / / từ bao gồm # "serialPort.h"
typedef unsigned char uint8 / / từ bao gồm # "sockets.h"
---------------------------
Và khi trình biên dịch cố gắng để biên dịch tập tin này, nó sẽ tạo ra một lỗi!

Khi các báo cáo bảo vệ, nơi được sử dụng ở đây, các file sẽ folowing đã được tạo ra:
--- SocketToSerial. Cpp ---
typedef unsigned char uint8 / / từ bao gồm # "serialPort.h"
/ / Từ bao gồm # "sockets.h" (biến bảo vệ cho types.h đã được quy định như vậy không có gì ở đây!
---------------------------

Antharax

 
Một anotation ittle ...

Trích:

....
có lẽ bất kỳ một điều duy nhất biết như những gì nó có nghĩa là .. làm thế nào trình biên dịch tạo ra??
 

Welcome to EDABoard.com

Sponsor

Back
Top