gpt4 book ai didi

c++ - 从编译中排除部分 - 仍然是语法检查

转载 作者:太空狗 更新时间:2023-10-29 20:36:10 25 4
gpt4 key购买 nike

我们在 C++/.NET/Visual Studio 中有一个相当大的项目,为了性能测试,我们包含了一些代码,可以评估某些点之间的执行时间。

PERFORMANCE_TEST BeginMeasureTime("execute someCode")
someCode
PERFORMANCE_TEST EndMeasureTime("execute someCode")

通常在开发 PERFORMANCE_TEST 宏时会设置为 // 以便关闭评估代码。因此,如果代码/接口(interface)等发生变化并且 PERFORMANCE_TEST 宏之后的代码失效,开发人员将不会注意到。

有没有更聪明的方法让性能评估代码只构建在项目的特殊版本中,但仍然确保它保持一致?您通常会怎么做?

最佳答案

一个简单的方法是改变

PERFORMANCE_TEST xxx

PERFORMANCE_TEST(xxx)

然后代替

#if PERFORMANCE_TEST_ENABLED
#define PERFORMANCE_TEST
#else
#define PERFORMANCE_TEST //
#endif

你可以

#if PERFORMANCE_TEST_ENABLED
#define PERFORMANCE_TEST(x) {x;}
#else
#define PERFORMANCE_TEST(x) if(0) { x; }
#endif

如果性能测试被禁用(或者至少它不会在 if 上分支),优化编译器应该不会为第二个版本生成代码,但它仍然是编译。

或者,如果构建时间不是问题,您可以简单地始终将两个版本构建到单独的目录中。

关于c++ - 从编译中排除部分 - 仍然是语法检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39633898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com