Chúng tôi đang làm việc trên hai cơ sở C++
mã, chúng ta hãy gọi nó Một và B, các Một là một xây dựng như một thư viện, và phân phối các tập tin tiêu đề .h
và .a
tập tin để B.Làm thế nào để đảm bảo cơ sở mã C++ khác nhau sử dụng cùng một macro?
Hãy nói rằng có Lock.h
tập tin trong Một như sau:
// Lock.h in code base A
class Lock {
... ...
#ifdef TRACK_THREAD_OWNER_FOR_DEBUG
virtual int GetLockOwner();
#endif
... ...
private:
CriticalSection section;
#ifdef TRACK_THREAD_OWNER_FOR_DEBUG
int threadOwner;
#endif
};
// Caller.cc in code base B
#include "xxx/xxx/Lock.h"
Lock lockObject;
lockObject.Lock();
Trong mã cơ sở Một, chúng tôi theo mặc định sẽ cho phép TRACK_THREAD_OWNER_FOR_DEBUG
và có thể thay đổi nó ngay trước ngày phát hành chính thức.
Chúng tôi nhấn một số lỗi khó vì TRACK_THREAD_OWNER_FOR_DEBUG
là khác nhau trong Một và B, và gây ra tham nhũng bộ nhớ vì sizeof(Lock)
là khác nhau trong hai thư viện.
Vậy làm thế nào để bảo vệ khỏi lỗi này? Chúng tôi có thể kích hoạt lỗi trình biên dịch khi xây dựng tệp caller.cc
nếu macro dựng hình TRACK_THREAD_OWNER_FOR_DEBUG
khác nhau trong hai dự án không?
Có, lỗi liên kết cũng được chấp nhận. – ZijingWu