我有一些相当通用的代码,它们使用预处理器宏将某个前缀添加到其他宏上。这是发生的事情的一个非常简化的例子:#defineMY_VAR(x)prefix_##x“prefix_”实际上是在别处定义的,所以每次包含文件时都会不同。它运行良好,但现在我有一些代码,如果其中一个标记不存在,我想跳过,但这不起作用:#ifdefinedMY_VAR(hello)我希望它扩展到的是:#ifdefprefix_hello但是我不知道怎么办。我需要使用MY_VAR()宏来进行扩展,所以我不能只对名称进行硬编码。(它实际上是针对一些测试代码,相同的代码每次都包含不同的前缀来测试一堆类,我想跳过一些类的几个测
我希望emacs在缩进方面将“#ifdef”完全像“{”一样,将“#endif”像“}”一样。像这样:#ifdef__linux__#include#endifintfunc(void){intfoo=0;#ifdefDO_STUFFfoo=do_stuff();#endifreturnfoo;}代替:#ifdef__linux__#include#endifintfunc(void){intfoo=0;#ifdefDO_STUFFfoo=do_stuff();#endifreturnfoo;}乱用“cpp-macro”并不能解决问题。我该怎么做?谢谢! 最
当我的代码中有这样的#ifdef#ifdef_DEBUGprintf("Thisisadebugbuild");#endifQtCreator将printf变灰,即使它是一个调试版本,当我运行它时“Thisisadebugbuild”被打印出来。智能感知似乎没有看到将通过命令行(即-D_DEBUG)传递给编译器的预处理器定义,而不是在头文件/源文件中定义。 最佳答案 以下内容在我的*.pro文件中运行良好:CONFIG(debug,release|debug):DEFINES+=_DEBUG切换构建类型也会切换灰色区域。不过,我使用
跟随我的previousquestionaboutvirtualandmultipleinheritance(在跨平台场景中)-在阅读了一些答案后,我想到我可以通过保留服务器和客户端类并用#ifdefs替换平台特定类来简化我的模型(这就是我要做的最初)。使用这段代码会不会更简单?这意味着至少会有更少的文件!缺点是它创建了一个有点“丑陋”且稍微难以阅读的Foobar类,因为到处都是#ifdefs。请注意,我们的UnixFoobar源代码永远不会传递给编译器,因此这与#ifdef具有相同的效果(因为我们还使用#ifdef来决定什么要调用的平台特定类)。classFoobar{public:
我想检测Xcode设置之外的环境变量。我可以在运行时检查环境,如DetectingifiOSappisrunindebugger中指定的那样,但是有没有办法用像这样的预处理器宏来做到这一点?#ifdefUSER_GRADHA//dosomestuff#else//dootherstuff#endif我的环境变量已设置,但尚未进入.m文件的编译阶段。我想在不必修改项目的预处理器宏变量的情况下完成此操作,因为我希望每个用户的编译都不同,而无需他们修改它。 最佳答案 没有。编译是一个非常有意的确定性过程,不依赖于外部环境。我知道编译根据谁
可以使用静态库中定义的宏吗?我有自己的调试宏,名为TWDEBUG,我在为共享而创建的静态库中使用它。如果我将静态库导入我的新项目并使用它,编译器似乎无法识别它。我确实将预处理器宏设置为TWDEBUG并将OtherCflags和OtherC++flags设置为-TWDEBUG,但是当我运行了ifdef宏没有执行的代码。 最佳答案 宏在编译时求值。因此,当您构建静态库时,它们的值会被卡住。对于调试语句,这通常意味着它们被省略而不是构建库的一部分。如果稍后将静态库添加到项目中,则可以更改宏的值。但它不会对静态库有任何影响,因为它不再被编译
C语言小知识预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif查了好久才知道的这个原理,记录一下吧!参考教程预处理命令在接触#if、#undef这类预处理指令前,大部分都都接触过#define、#include等预处理命令,通俗来讲预处理命令的作用就是在编译和链接之前,对源文件进行一些文本方面的操作,比如文本替换、文件包含、删除部分代码等,这个过程叫做预处理(在编译之前对源文件进行简单加工)(#define是一种宏定义命令,是预处理命令的一种)#in
我有一些C++代码,其中有一堆#ifdefWIN32,否则我们假设它的IOS代码。但是,我现在正尝试将相同的C++代码用于Android端口。#ifdefWIN32是否有某种等价物||安卓? 最佳答案 宏关于预定义宏,有著名的predef.sf.net.寻找Android会出现thedevicespage.那里:AndroidThefollowingmacroshavetobeincludedfromtheheaderfile.Type|Macro|Format|DescriptionVersion|__ANDROID_API__|
条件编译条件编译条件编译的格式常见形式defined运算符#if的使用#ifdefined的使用#if和#elif命令#ifdef和#ifndef命令#if#endif的用法#ifdef#endif的用法总结条件编译一般情况下,源程序中的所有行都参与编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令指定预处理器依据特定的条件来判断保留或删除某段源代码。例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代码的各种不同版本。条件编译
条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。最常见的条件编译是防止重复包含头文件的宏,几乎所有头文件都要采用下述的方法编辑以防止被重复包含,形式跟下面代码类似:#ifndefABCD_H#defineABCD_H//...somedeclarationcodes#endif//#ifndefABCD_H在C文件中通常有如下类似的定义:#ifdef_DEBUG//...dosomeoperations#endif#ifdef_WIN32//...useWin32API#endif常见的条件编译指令1、#if:如果条件为真,则执