我可以給一個解決方案。
但是:
的努力可能比人工檢測大得多。幾乎所有適合程序員的IDE都允許您查看給定變量的所有引用。
這可能不適用於任何情況,您需要專門針對某些類型。
這將通過單個程序運行收集。
這個想法是包裝你的數據類型。通過這種封裝,您可以計算每個讀取操作。 請參閱:
template <class T, class Parent, int NO=1>
class TReadDetector {
public:
struct Data {
bool touched;
Data() : touched(false) {}
~Data() {
if (!touched)
std::cerr << typeid(*this).name() << ": not read!!!\n" << std::endl;
}
};
static Data data;
TReadDetector() {}
TReadDetector (const T& t) : t(t) {}
operator T() const { data.touched = true; return t; }
TReadDetector& operator = (const T& t) { this->t = t; }
private:
T t;
};
template <class T, class Parent, int NO>
typename TReadDetector<T,Parent,NO>::Data
TReadDetector<T,Parent,NO>::data;
與用法:
相反的:
struct A {
int a;
int b;
};
做到這一點:
struct A {
TReadDetector<int,A, 1> a;
TReadDetector<int,A, 2> b;
};
int main() {
A a;
a.a = 7;
a.b = 8;
std::cout << a.a << std::endl;
std::cout << TReadDetector<int,A, 1>::data.touched << std::endl;
std::cout << TReadDetector<int,A, 2>::data.touched << std::endl;
std::cout << "main() ended" << std::endl;
};
它將導致:
7
1
0
main() ended
N13TReadDetectorIi1ALi2EE4DataE: not read!!!
通知最後一行main()
後打印。您可以將這些數據收集到一些外部文件。
[這裏是一個列表](http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#C.2FC.2B.2B)用於C和C++的靜態分析工具。他們中的一些人可能能夠檢測到你的情況。 –
哦,我有很多這些。不能被打擾修復它們。與DID需要修復的其他大規模開發工作相比,除非嵌入式代碼具有有限的內存(這種情況下,我將消除所有未使用的內存位),否則這對於我來說是一個微不足道的問題。 –