Có phải là một cách thực hành tốt để sử dụng #ifdef trong quá trình phát triển để chuyển đổi giữa các loại hành vi khác nhau? Ví dụ, tôi muốn thay đổi hành vi của mã hiện tại, tôi có một số ý tưởng về cách thay đổi hành vi và cần phải chuyển đổi giữa các triển khai khác nhau để kiểm tra và so sánh các cách tiếp cận khác nhau. Thông thường các thay đổi trong mã rất phức tạp và ảnh hưởng đến các phương thức khác nhau trong các tệp khác nhau.
Tôi thường giới thiệu một số định danh và làm một cái gì đó như thế
void foo()
{
doSomething1();
#ifdef APPROACH1
foo_approach1();
#endif
doSomething2();
#ifdef APPROACH2
foo_approach2();
#endif
}
void bar()
{
doSomething3();
#ifndef APPROACH3
doSomething4();
#endif
doSomething5();
#ifdef APPROACH2
bar_approach2();
#endif
}
int main()
{
foo();
bar();
return 0;
}
Điều này cho phép chuyển đổi giữa các cách tiếp cận khác nhau một cách nhanh chóng và thực hiện mọi thứ chỉ trong một bản sao của mã nguồn. Đó có phải là một cách tiếp cận tốt để phát triển hay có một thực tiễn tốt hơn?
#ifdef
các khối nếu khối bị tắt. Chúng tôi gặp phải trường hợp mã có thể dễ dàng bị lỗi thời và không biên dịch nếu bạn không thường xuyên xây dựng tất cả các đường dẫn.
#ifdefs
ít cồng kềnh.