如果包含特定库,我正在编写一个需要一些代码的库。由于这段代码散布在项目各处,如果用户不必自己注释/取消注释一切就好了。在C语言中,在header中使用#define,然后用#ifdefs包围代码块,这就很容易了。当然,Java没有C预处理器...澄清一下-几个外部库将与我的一起分发。我不想将它们全部包括在内以最小化我的可执行文件大小。如果开发人员确实包含了一个库,我需要能够使用它,如果没有,那么就可以忽略它。在Java中执行此操作的最佳方法是什么? 最佳答案 无法在Java中做您想做的事。您可以预处理Java源文件,但这超出了Jav
预处理器可用于使用#define将某些关键字替换为其他词。例如,我可以执行#definename"George",每次预处理器在程序中找到“name”时,它都会将其替换为“George”。但是,这似乎只适用于代码。我怎么能用字符串和文本做到这一点?例如,如果我在屏幕上打印“HelloIamname”,我希望将“name”替换为“George”,即使它是字符串而不是代码。我不想手动在字符串中搜索关键字然后替换它们,而是想使用预处理器来切换单词。这可能吗?如果是怎么办?我正在使用C++,但C解决方案也可以接受。 最佳答案 #define
是#defineLBitmapstd::list一个好的做法?编辑:好吧,我该怎么做才能让我的老板相信这是不好的做法? 最佳答案 不,在C++中使用#define不是一个好习惯。最好使用typedef,因为它具有明确定义的范围typedef是范围定义的,编译器每次遇到它时都会解释它的定义,这不是#define的情况。#define被解释为编译时间本身。这是typedef和#define的MSDN定义typedef声明引入了一个名称,该名称在其范围内成为声明的类型声明部分给出的类型的同义词当使用DEFINE语句时,该语句的所有实例都将
我正在使用Qt开发一个C++项目。我启用了syntastic通过我的vimrc检查头文件,它的检查器(gcc、clang_check和clang_tidy)都在我的项目中提示同样的事情:他们无法找到特定的头文件。有问题的头文件是“QtCore/qconfig-64.h”。他们说这个文件不存在是正确的。问题是该文件不应加载到项目中,因为它是一个32位项目。'QtCore/qconfig.h'有一个预处理器方向,通知项目要包含的内容:#if__WORDSIZE==32#include"QtCore/qconfig-32.h"#elif__WORDSIZE==64#include"QtCor
如果您有一个名为ThisIsAHeaderFile.h的头文件,以下仍将在VisualStudio中找到该文件:#include有没有办法强制区分大小写,以便#include会导致错误? 最佳答案 你不能,因为Windows文件系统本身是不区分大小写的。如果您遇到同时拥有RICHIE.h和richie.h的情况,那么控制区分大小写可能有意义,但您不能。 关于c++-如何使用#includes强制VisualStudio预处理器区分大小写?,我们在StackOverflow上找到一个类似的
所以,这基本上就是我想要做的:#defineRS03(obj,a1,a2,a3){if(_str1==#a1)_file>>_##a1;if(_str1==#a2)_file>>_##a2;if(_str1==#a3)_file>>_##a3;obj(_##a1,_##a2,_##a3);}这是三个参数的情况,但我还需要:#defineRS04(obj,a1,a2,a3,a4)#defineRS05(obj,a1,a2,a3,a4,a5)#defineRS06(obj,a1,a2,a3,a4,a5,a6)...所以是一个可变参数宏。Stackoverflow上有很多关于此类主题的问题,
我知道gcc预处理器可以使用-fpreprocessed仅从文件中删除注释并保持其余部分不变,但我如何对clang执行相同的操作? 最佳答案 作为decribedhere,使用-E(可能还有-P,以排除行号信息)clang-E-P-o(虽然这不仅仅是删除评论-它还会扩展宏等......) 关于c++-Clang预处理器从C++文件中去除注释,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi
对于单个变量(或给定数量的变量),很容易使用宏来对变量进行字符串化。例如。对于2个变量,我可以这样做:#defineSTRINGIFY(var1,var2)(std::string(#var1)+""+#var2)有没有一种方法可以使用可变参数宏或某种其他类型的编译时技巧来扩展上述内容,以最终获得接受任意数量参数的STRINGIFY函数? 最佳答案 我不确定我是否理解您要尝试做的事情。下面的代码在编译时标记化了__VA_ARGS__。它不检查语法:它盲目地将空格和逗号替换为'\0',将标识符的开头存储在arg中,并将参数数量存储在a
引用iOSDocumentationonWrapperHeaders:#include_nextdoesnotdistinguishbetweenand"file"inclusion,nordoesitcheckthatthefileyouspecifyhasthesamenameasthecurrentfile.Itsimplylooksforthefilenamed,startingwiththedirectoryinthesearchpathaftertheonewherethecurrentfilewasfound.Theuseof`#include_next'canleadt
我在Win7x64构建环境中使用nmake构建驱动程序时遇到问题。我正在定义一个预处理器变量并使用-通过命令行传递它build/nmake"USER_C_FLAGS=/DMyVersion=3"构建日志是-.../DMyVersion=3/typedil-/wd4603/wd4627....因此,我清楚地将变量视为编译器选项的一部分。现在在标题文件中,我做#defineotherVersion10#ifdefMyVersion#undefotherVersion#defineotherVersionMyVersion#endif#defineFileVersionotherVersio