草庐IT

c++ - 使用宏增加 C++ 代码的详细程度

我希望有可能增加详细程度以用于我的程序的调试目的。当然,我可以在运行时使用开关/标志来做到这一点。但这可能非常低效,因为我应该将所有“if”语句添加到我的代码中。因此,我想添加一个在编译期间使用的标志,以便在我的代码中包含可选的、通常很慢的调试操作,而不会在不需要时影响我的程序的性能/大小。这是一个例子:/*code*/#ifdef_DEBUG_/*dodebugoperationshere#endif所以,使用-D_DEBUG_编译应该可以解决问题。没有它,该部分将不会包含在我的程序中。另一种选择(至少对于i/o操作)是定义至少一个i/o函数,例如#ifdef_DEBUG_#defi

c++ - 如何在 VS 中高效地调试宏?

我的(非托管)C++代码中有一个相当复杂的宏。有没有办法在VS调试器中扩展宏?或者也许还有另一种调试宏的方法?F.e.我想在里面放一个断点。(是的,我知道宏不好。) 最佳答案 通过右键单击并转到“属性”来转到项目或源文件属性。在ConfigurationProperties->C/C++->Preprocessor下,将“GeneratePreprocessedFile”设置为带或不带行号,无论您喜欢哪个。这将显示您的宏在上下文中扩展为什么。如果您需要在实时编译的代码上对其进行调试,只需将其剪切并粘贴,然后在调试时将其放在宏的位置。

C++ 格式宏/​​内联 ostringstream

我正在尝试编写一个允许我执行以下操作的宏:FORMAT(a,结果将是一个字符串——与创建ostringstream相同,插入a...d,并返回.str().比如:stringf(){ostringstreamo;o基本上,FORMAT(a.首先,我试过了:1:#defineFORMAT(items)\((std::ostringstream&)(std::ostringstream()如果第一项是C字符串(constchar*),它将以十六进制打印字符串的地址,并且下一项将正常打印。如果第一项是std::string,会编译失败(没有匹配的运算符)。这个:2:#defineFORMAT

C++11嵌套宏调用?

它在C++std16.3.4中说:Theresultingpreprocessingtokensequence[fromamacroinvocationreplacement]isrescanned,alongwithallsubsequentpreprocessingtokensofthesourcefile,formoremacronamestoreplace.Ifthenameofthemacrobeingreplacedisfoundduringthisscanofthereplacementlist(notincludingtherestofthesourcefile’spr

c++ - 了解DEFER和OBSTRUCT宏

我创建了一个smallmacrometaprogramminglibrary,它实现了基本有用的构造,例如REPEAT(times,x),IF(value,true,false),元组等。我的大多数实现都是通过根据可变参数的数量或通过计数器重载宏来工作的://Example:#defineREPEAT_0(x)#defineREPEAT_1(x)xREPEAT_0(x)#defineREPEAT_2(x)xREPEAT_1(x)#defineREPEAT_3(x)xREPEAT_2(x)//...//(thesedefinesaregeneratedusinganexternalscr

c++ - ARRAYSIZE C++ 宏 : how does it work?

好的,我不是完全新手,但我不能说我理解以下宏。最令人困惑的部分是将value转换为size_t的除法:这到底完成了什么?特别是,因为我看到一个否定运算符,据我所知,它可能会导致零值。这是否意味着它会导致被零除的错误?(顺便说一下,宏是正确的,而且效果很好。)#defineARRAYSIZE(a)\((sizeof(a)/sizeof(*(a)))/\static_cast(!(sizeof(a)%sizeof(*(a))))) 最佳答案 第一部分(sizeof(a)/sizeof(*(a)))相当简单;它将整个数组的大小(假设您将宏

c++ - 如何检查多个宏之一是否在单个#ifdef 中定义?

我有一些C++代码,如果定义了__APPLE__或__linux宏,我想执行一个操作。如果我把它作为一个普通的if条件,使用||会很容易:if(something||something){..code..}但据我所知,#ifdef语句没有||运算符。如何检查__APPLE__或__linux是否使用单个#ifdef语句定义? 最佳答案 你不能在单个#ifdef中用单个#if代替吗?#ifdefined(__APPLE__)||defined(__linux)如果您愿意,这也可以使用#ifdefined__APPLE__||defin

c++ - 如何防止宏重新定义

在我的项目上工作了一段时间后,此警告开始出现:2>Game.cpp2>c:\programfiles\microsoftsdks\windows\v6.0a\include\windef.h(126):warningC4005:'APIENTRY':redefinicióndemacro2>c:\users\ferran\directo\gameprojects\dev-libs\glfw\include\glfw.h(72):vealadefiniciónanteriorde'APIENTRY'2>c:\programfiles\microsoftsdks\windows\v6.0a

c++ - 如何使用宏在 C++ 中生成随机变量名称?

我正在用C++创建一个宏,它声明一个变量并为其分配一些值。根据宏的使用方式,宏的第二次出现可以覆盖第一个变量的值。例如:#defineMY_MACROintmy_variable_[random-number-here]=getCurrentTime();使用它的另一个动机是避免为变量选择特定名称,以便它与开发人员使用宏最终选择的名称相同。有没有办法在C++的宏中生成随机变量名?--编辑--我的意思是唯一的,但也是随机的,一旦我可以在一个block中使用我的宏两次,在这种情况下,它会生成如下内容:intunique_variable_name;...intunique_variable

c++ - 编译时 sizeof_array 不使用宏

这只是过去几天一直困扰我的事情,我认为不可能解决,但我以前见过模板魔术。这里是:要获取标准C++数组中的元素数量,我可以使用宏(1)或类型安全的内联函数(2):(1)#definesizeof_array(ARRAY)(sizeof(ARRAY)/sizeof(ARRAY[0]))(2)templatesize_tsizeof_array(constT&ARRAY){return(sizeof(ARRAY)/sizeof(ARRAY[0]));}如您所见,第一个存在宏的问题(目前我认为这是一个问题),而另一个存在无法在编译时获取数组大小的问题;即我不会写:enumENUM{N=size