如果包含特定库,我正在编写一个需要一些代码的库。由于这段代码散布在项目各处,如果用户不必自己注释/取消注释一切就好了。在C语言中,在header中使用#define,然后用#ifdefs包围代码块,这就很容易了。当然,Java没有C预处理器...澄清一下-几个外部库将与我的一起分发。我不想将它们全部包括在内以最小化我的可执行文件大小。如果开发人员确实包含了一个库,我需要能够使用它,如果没有,那么就可以忽略它。在Java中执行此操作的最佳方法是什么? 最佳答案 无法在Java中做您想做的事。您可以预处理Java源文件,但这超出了Jav
我正在尝试实现类似于C#预处理器的功能。我知道Java没有相同的预处理器功能,并且知道有一些方法可以使用诸如工厂之类的设计模式来实现类似的结果。但是,我仍然有兴趣找到这个问题的解决方案。目前,我所做的是创建一个包含几个静态最终boolean属性的类,例如以下示例:publicclassPreprocessor{publicstaticfinalbooleanFULLACCESS=false;}然后我按以下方式使用它:publicClassNamegetClassName(){if(Preprocessor.FULLACCESS){returnthis;}else{returnthis.
我正在尝试获取操作系统和编译器名称作为C++中的字符串。尽管对此有很多疑问,但我没有找到明确的答案。所以我尝试使用Boost.Predef1.55,它定义了BOOST_OS_类型的宏。和BOOST_OS__NAME.因此可以简单地做if(BOOST_OS_)returnBOOST_OS__NAME;对于每个操作系统boost支持。与COMP的编译器相同而不是OS.为了避免重复,我想使用Boost.Preprocessor并将它们全部放在一个循环中。我想出的是这个:#defineMAKE_STMT_I2(PREFIX)if(PREFIX)returnPREFIX##_NAME;#defi
实际上我有一个库“cryptopp”,我想要的是当我对文件进行任何更改并发出make命令时,它应该处理在任何文件中所做的更改源目录。好吧,cryptoopp的GNUMakefile会处理在“.cpp”文件中所做的“if”更改,但不会处理在“.h”文件中所做的更改。那么我可以在cryptopp的“GNUMakefile”中进行哪些更改,以便它查看所有修改后的头文件并重新编译依赖于“修改后”头文件的所有文件。 最佳答案 如果您使用g++构建,您可以让g++生成依赖性makefile。您可以将这些包含在您的主makefile中。使用-M和
unixpreproc.cpp#ifdefunix#warning"unixisdefined"#endif#ifdef__unix__#warning"__unix__isdefined"#endifvoidmain(){}使用英特尔C++编译器19.0.3:icpc-ounixpreprocunixpreproc.cpp显示unix和__unix__宏都定义了但是icpc-std=c++11-ounixpreprocunixpreproc.cpp显示仅定义了__unix__。这是故意的吗?是notdocumentedintheIntelcompilermanual.
有没有办法用预处理器宏创建一个std::string(或char*)数组?像这样:std::stringmyStrings[]={MAGIC_MACRO(a,b,c)};结果:std::stringmyStrings[]={"a","b","c"}我知道它看起来毫无意义,但我需要在具有可变数量参数的更复杂的宏中使用它 最佳答案 下面的代码使用最多1024个参数来满足您的要求,并且没有使用额外的东西,比如boost。它定义了一个EVAL(...)和一个MAP(m,first,...)宏来进行递归并在每次迭代中使用宏m与下一个参数fir
如何使用boost::preprocessor解压一个序列对?例如,我有一个序列如下(之间的逗号无关紧要)(int,x)(double,y)(float,z)or(int,x),(double,y),(float,z)or((int)(x))((double)(y))((float)(z))想转换成int,double,float和x,y,z通过使用macor之类的UNZIP(i,seq)其中i是索引。 最佳答案 (int,x,10)(double,y,20)(float,z,30)的解压缩,即元素之间没有逗号的序列。LIVEDEM
我正在努力从弗兰肯斯坦和一个文件数千行的程序转变为结构良好、组织良好的多文件程序。现在看起来很自然(天真)的是为我的三个文件制作一个包含标题的三角恋:file_1包括file_2、file_4file_2包括file_3、file_4file_3包括file_1....等等等等这些文件具有我在其他文件之间需要的变量、方法、结构等。当然,我遇到了双重包含错误。我的问题:我应该通过在header中使用预处理器指令(例如,完全在header中包括结构、方法等)来避免这些问题,还是应该使用makefile进行编译(我hear也可以用来解决这个问题---但我从来没有做过)?
我在使用cpp预处理器时遇到问题。我有这样的Input.h文件:#ifndefPLATFORM_MOBILE1111#defineMyTestWEB111#endifintMyTest;我用这个命令处理它(在OSX上):cpp-E-PSource/Input.hGenerated/Output.h我明白了:#defineMyTestWEB111intMyTest;即宏MyTest未被应用。为什么?经过大量实验,我发现如果我在#ifndef行之后插入空行、变量定义、注释或任何其他行-那么它就可以正常工作。#ifndefPLATFORM_MOBILE1111#defineMyTestWEB
在我的代码中的某处,我有预处理器定义#defineZOOM_FACTOR1我在另一个地方#ifdefZOOM_FACTOR#if(ZOOM_FACTOR==1)#defineFONT_SIZE8#else#defineFONT_SIZE12#endif#else#defineFONT_SIZE8#endif问题是当我将ZOOM_FACTOR值更改为float值时,例如1.5,出现编译错误C1017:无效的整数常量表达式。有谁知道我为什么会收到这个错误,有没有办法在预处理器指令中比较integer和floatingpointnumber? 最佳答案