草庐IT

If-Modified-Since

全部标签

python - 解析 C++ 预处理器 #if 语句

我有一个带条件编译的C/C++源文件。在我将它发送给客户之前,我想删除大部分#if语句,这样我的客户就不必担心将正确的-D选项传递给编译器。我已经在Python中实现并工作了,但它只能正确处理#ifdef和#ifndef语句。我需要添加对#if语句的支持,但#if的语法要复杂得多。(例如,您可以使用&&、||、!、括号、关系运算符、算术等)。是否有任何现有的开源代码来解析和评估#if语句?(最好使用Python)。我所知道的唯一实现是GCC,这对于这项任务来说太复杂了。 最佳答案 作为KeithBsaid,你可以让预处理器为你做这件

C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误

我有这个编译时没有出现来自visualstudio的错误“fatalerrorC1017:无效整数常量表达式”。我该怎么做?templateA*Create(){#ifsizeof(B)>sizeof(A)#errorsizeof(B)>sizeof(A)!#endif...} 最佳答案 预处理器不理解sizeof()(或数据类型、标识符、模板或类定义,它需要理解所有这些东西才能实现sizeof)。您正在寻找的是静态断言(由编译器强制执行,它理解所有这些事情)。我用Boost.StaticAssert为此:templateA*Cre

c++ - 将函数放在 if 语句中是否有效? (C++)

我见过这样的说法if(SomeBoolReturningFunc()){//dosomestuff//dosomemorestuff}我想知道将函数放在if语句中是否有效,或者是否存在将它们分开会更好的情况,就像这样boolAwesomeResult=SomeBoolReturningFunc();if(AwesomeResult){//dosomeother,moreimportantstuff}...? 最佳答案 我不确定是什么让您认为首先将表达式的结果分配给变量会比评估表达式本身更有效,但这永远不会重要,因此请选择增强您的可读

c++ - 隐藏参数 C++ 的有趣案例(参数未在 if block 中隐藏)

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我今天惊讶地发现下面的代码是完全有效的(gcc4.4.5):intget_int(constint&i){if(i==0){inti=1;returni;}returni;}我真的很惊讶。如果我必须接受它,那么我可以肯定地说它是有道理的,因为新变量在它自己的block中,所以外部的其余代码仍然可以访问该参数,因此该参数并没有真正被隐藏。但这对我来说仍然没有

C#/命令行界面 : Destructor not called if Dispose() used in it

我有一个名为“CTransferManaged”的C++/CLI类,其中实现了终结器和析构函数:CTransferManaged::~CTransferManaged(){this->!CTransferManaged();}CTransferManaged::!CTransferManaged(){//Cleanupresources...}此类由名为“CTransfer”的C#类包装,其中包含类型为CTransferManaged的​​对象m_transfer。如果此类的析构函数仅清除对对象m_transfer的引用,我可以看到调用了析构函数(命中断点):~CTransfer(){

c++ - 将成员声明与 enable_if 一起使用?

我需要有条件地使用成员声明。templatestructB;templatestructB{voidfoo();};templatestructB{};templatestructA:publicB::value>{usingB::value>::foo();voidfoo(int){}};这显然行不通,因为B::foo没有定义在一半的情况下。我怎样才能做到这一点?拥有B::foo()在A中可见foo(int)旁边的作用域?感谢帮助 最佳答案 这是我的解决方案。我敢肯定它不会是最好的,但它可以完成工作。structA{voidfoo

c++ - noexcept 运算符和 enable_if_t : do they work together?

考虑以下类:structS{templatestd::enable_if_t::value>f()noexcept{}templatestd::enable_if_t::value>g()noexcept{}};正如预期的那样,编译:s.f();这个不是:s.g();令我困惑的是,下面的main是用GCC(6.2)编译的,而不是用clang(3.9)编译的:intmain(){static_assert(noexcept(&S::f),"!");static_assert(noexcept(&S::g),"!");}我会说第二个断言失败是因为特化无效。两个编译器不同意这一点。哪个是正确

html和嵌套if语句

我将代码简化为基础知识,并遇到了相同的错误。!DOCTYPEhtml>NewPage}看答案尝试这个NewPage';}}}}else{$_SESSION['MEMID']='';$_SESSION['Password']='';$_SESSION['MemName']='';}?>**修改:-**重定向到另一页,然后替换此页面if($_SESSION['Password']==$_POST['Password']){echo'NewPage';}有了这个if($_SESSION['Password']==$_POST['Password']){echo'location.href="inde

python - if 语句范围内的 C++ 宏未编译

我有一些代码应该是线程安全的python/c++api。我正在使用宏Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS,它们扩展以创建保存线程状态并创建锁。我在方法退出之前释放锁;一次在if语句范围内,一次在方法范围内。为什么不能编译?它在第二个Py_END_ALLOW_THREADS宏中生成错误:error:_savewasnotdeclaredinthisscope。uint8_tSerialBuffer::push_msg(){#ifdefined(UBUNTU)Py_BEGIN_ALLOW_THREADS#endifif(_type==ARR

c++ - 使用 enable_if 禁用模板类的模板构造函数

当模板构造函数的参数类型与类型“MyClass匹配时,我试图使用std::enable_if禁用模板类的模板构造函数"这样我就可以使用我的其他构造函数,它允许我用另一个模板的类初始化当前模板的类。templateclassMyClass{public:MyClass(){data.fill(static_cast(0));}template//iwanttodisablethisifArgs=MyClassMyClass(Args&&...args):data{std::forward(args)...}{}templateMyClass(constMyclass&other_size