我有以下代码:#ifdefQ_OS_WIN32Sleep(25);#endif为Windows上的Qt编写。我知道这段代码以前编译过,但现在由于某种原因它说Sleep没有在此范围内声明。必须有一些方法可以解决这个问题而不必添加#include"windows.h"任何与此有关的经验/建议都会很棒!! 最佳答案 Theremustbesomewayaroundthiswithouthavingtoadd官方MSDNdocumentationsays你需要包含它,所以请不要避免它。最好始终对您的依赖项明确说明,以避免隐藏的依赖项问题,当
onLoad(){ // MP 代表所有小程序 #ifdefMP //如果是小程序 例如显示返回按钮 this.showBack=false //#endIf }在data中定义showBackdata(){ return{ //#ifndefMP showBack:true. //#endif }} ///=======APP:/*#ifdefAPP-PLUS*/ top:0; /*#endif*/H5 /*#ifdefH5*/ top:88rpx;
我想修改我的Qt项目的qmake文件,使其构建我的程序的两个版本:一个定义了SOME_FLAG,一个没有定义。根据#ifdefSOME_FLAG的结果,我的代码会有不同的行为。这可能吗? 最佳答案 据我所知,qmake只允许一个TARGET,只有一个异常(exception)。也就是说,如果您想要构建调试版本和发布版本,则可以使用相同的项目文件来构建两者。这样,您还可以分别为每个构建指定DEFINES。请记住,您可以在事后使用strip命令删除调试,也许这对您的情况有用。Qt4HTML文档(查看它们是否安装在您的系统上)描述了qma
为什么下面的代码可以编译?#ifdefC++11//...#endifintmain(){}gcc4.8.0给我以下警告:extratokensatendof#ifdefdirective按照标准,宏名只能包含字母、数字和下划线字符。也许是因为这个?ISO/IEC14882:201116.1Conditionalinclusion[cpp.cond]6Eachdirective’sconditionischeckedinorder.Ifitevaluatestofalse(zero),thegroupthatitcontrolsisskipped:directivesareproces
如果我在visualstudio2013上工作,main函数中的#ifdef_DEBUG是否有意义?如果是,它的用途是什么?int_tmain(intargc,_TCHAR*argv[]){#ifdef_DEBUG//creatingsomeobjects,usingfunctionsetc;#endif} 最佳答案 #ifdefDEBUG或#ifdef_DEBUG用于处理您用于调试目的的一些代码。如果添加#undef_DEBUG或在代码的最开头与此类似,编译器将跳过#ifdefDEBUG/*blabla*/#endif中包含的代码
由于每个编译器都有自己的线程本地存储版本,我最终为它创建了一个宏。现在唯一的问题是GCC(关闭了pthreads),这给了我:“此目标不支持线程本地存储”很公平,因为在这种情况下pthreads实际上是关闭的。问题是,是否有一种通用的方法可以使用一些宏来检测这一点,例如#ifdef__GCC_XXX_NO_THREADS_XXX?编辑:请参阅下面接受的答案。另外,这是我的懒惰解决方案:$touchtest.c$gcc-E-dMtest.c>out.1$gcc-pthread-E-dMtest.c>out.2$diffout.*28a29>#define_REENTRANT1这是在Mac
我无法让#ifdef规则至少在Windows(64位)上工作。编译器版本是g++5.4.0我试过:#ifdef_WIN32#ifdef_WIN64#ifdefOS_WINDOWS我编译了以下测试:g++main.cpp即使是这样一个简单的代码:#includeintmain(){std::cout输出是:"youareon..."...没有其他任何东西被淘汰。 最佳答案 #ifdef_WIN32#ifdef_WIN64这些是由MSVC编译器定义的预定义宏。您似乎正在使用g++。这可能意味着MinGW或Cygwin。Here和here
我的问题首先是理解#ifndef和#ifdef。我还想了解#if、#ifndef和#ifdef之间的区别。我知道#if基本上是一个if语句。例如:#include#defineLINUX_GRAPHICS011x101intmain(){longCompare=LINUX_GRAPHICS;#ifCompare==LINUX_GRAPHICSstd::cout但是其他人,虽然我读过他们,但我无法理解。它们看起来也非常相似,但我怀疑它们的作用是否相似。将不胜感激。 最佳答案 宏由预处理器扩展,预处理器在运行时对变量值一无所知。它只是关
在我们的应用程序中,我们创建了自己的日志系统。在这个日志系统中,有几种不同的日志类型,调试、错误、警告、通信、性能等等。有很多#ifdef和#endif可以禁用特定的日志类型。这些#ifdef和#endif使代码难以阅读。我们正在考虑删除这些#ifdef和#endif并在消息写入文件之前进行检查。这意味着对日志系统有很多“无用”调用。这些调用不会导致任何写入事件。如果没有这些#ifdef和#endif,是否有更好的方法来打开/关闭日志类型AND这些“无用”调用? 最佳答案 以下情况如何://commentoutifnotneeded
首先,我读过这个问题:Isthereawaytodetectportablythatastandardheaderisincludedusingmacros?我想知道的是:使用#ifdef检测是否包含c++stdheader的安全性如何,如下面的代码所示:namespaceoverwrite{usingbyte=unsignedchar;templatevoidwithZeros(generic*toBeOverwriten,size_tlength=1){//dostuff}#ifdef_GLIBCXX_RANDOM//foundthismacroinsidetemplatevoid