草庐IT

c++ - 哪些用例需要 #define 而不使用标记字符串?

之前在学习C的时候遇到过#define预处理器指令,后来在看的一些代码中也遇到过。但是除了用它来确定常量的替换和定义宏之外,我还没有真正理解它在没有“主体”或标记字符串的情况下使用的特殊情况。以这一行为例:#defineOCSTR(X)就是这样!这个或更好的用途是什么,什么时候需要使用#define? 最佳答案 这用于两种情况。第一个也是最常见的涉及条件编译:#ifndefXYZ#defineXYZ//...#endif你肯定自己用过它来包含守卫,但它也可以是用于诸如系统依赖之类的事情:#ifdefWIN32//Windowsspe

c++ - C/C++ #define 宏里面的宏?

我想要这样的东西:#defineC_OR_CPP(C__,CPP__)#ifdef__cplusplus\CPP__\#else\C__\#endif这可能吗?也许一些肮脏的#includehack?原因:我制作了一个header,其中结构使用vector*类型的成员变量,但在C中我希望它只是void*,你知道的。TIA 最佳答案 有什么问题#ifdef__cplusplus#defineC_OR_CPP(C,CPP)CPP#else#defineC_OR_CPP(C,CPP)C#endif(根据phresnel注释将带有双下划线的

c++ - 库标题和#define

我不确定该搜索什么。如果这很简单,请原谅。但让我概述一下场景,看看那里有什么答案。假设我有一个定义如下结构的库:structExample{inta;#ifB_ENABLEDintb;#endif};此header作为整个库安装的一部分安装。我的问题是,如果我的库定义了B_ENABLED,它将具有包含这两个变量的结构。但是如果我的应用程序也没有定义它。然后它会将header解释为定义一个只有一个成员的结构。处理这个问题的最好方法是生成某种“选项”header,其中包含库构建中指定的所有#defines吗?我的库使用CMAKE构建。因此,针对此问题的CMAKE解决方案是extracred

c++ - 如何通过 JNI/NDK 获取 Android 应用程序中使用的 C++ 库的日志行(printf、cout 等)的控制台输出

在我的Android应用程序中,我通过JNI使用nativeC++库。如果它在Debug模式下构建,该库会生成日志行。我想将日志行重定向到logcat。所以我在Debug模式下创建了库,NDK_DEBUG=1被使用并且LOCAL_LDLIBS+=-llog已设置。我的设备没有root但我设置了:$adbshell停止$adbshellsetproplog.redirect-stdiotrue$adbshell启动就像在http://developer.android.com/tools/debugging/debugging-log.html#viewingStd中描述的那样在这里Is

c++ - 无需替换 C++ 的预处理器宏

根据cplusplus.com,定义宏的语法是:#defineidentifierreplacement但是,我有时会偶然发现不包含替换的宏定义。例如在afxwin.h中,有如下预处理器定义:#defineafx_msg//intentionalplaceholder我的问题:当使用没有替换的预处理器定义时,在编译时会发生什么?它只是被忽略了吗?例如,行afx_msgvoidOnAddButton();是否变为voidOnAddButton();?不替换地使用预处理器的目的是什么?仅仅是为了让代码更清晰吗? 最佳答案 “Nothin

c++ - 别人的库#define命名冲突

很难为这个问题想出一个合适的标题。无论如何...我目前正在研究GUI我的游戏在SDL.当出现奇怪的错误时,我已经完成了软件绘图并正准备开始其中的OpenGL部分。我包含了“SDL/SDL_opengl.h”header并进行了编译。它抛出“错误C2039:‘DrawTextW’:不是‘GameLib::FontHandler’的成员”,这是一个足够简单的错误,但我没有任何称为DrawTextW的东西,只有FontHandler::DrawText。我搜索DrawTextW并在header“WinUser.h”中的#define调用中找到它!//WinUser.h#defineDrawT

C++ 定义的 16 位(高)颜色

我正在从事一个带有TFT触摸屏的项目。这个屏幕有一个包含的库。但是经过一些阅读,我仍然没有得到一些东西。在库中有一些关于颜色的定义:/*someRGBcolordefinitions*/#defineBlack0x0000/*0,0,0*/#defineNavy0x000F/*0,0,128*/#defineDarkGreen0x03E0/*0,128,0*/#defineDarkCyan0x03EF/*0,128,128*/#defineMaroon0x7800/*128,0,0*/#definePurple0x780F/*128,0,128*/#defineOlive0x7BE0/

c++ - 在#define 中打印变量名

我正在尝试使用宏在调试时将显示成员值的变量名称打印到控制台(日志记录)。怎么做?我尝试了以下但它不起作用。#defineMY_PRINT(x)std::cout 最佳答案 Auch...我找到了解决方案。我应该这样写宏#defineMY_PRINT(x)std::cout 关于c++-在#define中打印变量名,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7766115/

ios - 关闭 lldb 控制台的日志记录(适用于 iOS 的套接字 IO 框架)

我正在使用pkyeck/socket.IO-objc框架。它非常好,但是我无法使用它向lldb生成的详细日志进行调试,这使得控制台不断充满关于流量的描述,这些描述目前对我来说毫无用处。我找不到如何将其OFF的方法。有人知道怎么做吗?我无法想象自己用NSLog注释掉所有行... 最佳答案 找到解决方案。修改框架的源代码是相当不受欢迎的——通常按原样使用它是一个很好的做法,但因为没有任何其他方法......在文件SocketIO.m中,找到行号32-39:#defineDEBUG_LOGS1#defineDEBUG_CERTIFICAT

ios - 定义基于 BOOL 的常量

在我的iOS应用程序中,我有一个constants.h类,我在其中定义了kBorderWidth。对于Retina显示器,我希望它为0.5,这样边框的厚度为1个像素,而在非Retina显示器上,我希望它为1,以便它保持一个像素的厚度而不是更少。这是我现在的代码:#defineIS_RETINA([[UIScreenmainScreen]respondsToSelector:@selector(displayLinkWithTarget:selector:)]&&([UIScreenmainScreen].scale==2.0))#if__IS_RETINA==1#definekBord