草庐IT

c++ - BITCOUNT 宏需要解释

谁能解释一下这是如何工作的?#defineBX_(x)((x)-(((x)>>1)&0x77777777)\-(((x)>>2)&0x33333333)\-(((x)>>3)&0x11111111))#defineBITCOUNT(x)(((BX_(x)+(BX_(x)>>4))&0x0F0F0F0F)%255)澄清:理想情况下,答案将按照以下方式开始:宏:“BX_”从传入的数字中减去三个值。这三个值代表:XXXXX年年年ZZZZZ这允许BITCOUNT()如下工作......干杯,大卫 最佳答案 BX_(x)的输出是每个十六进制数

c++ - 如何在 Xcode 中检测带有宏的 C++ 编译器?

我在iOS项目中混合使用Objective-C(*.m)和Objective-C++(*.mm)源文件。当我在*.m文件中导入C++头文件时,如何排除头文件中的C++特定代码?我想使用编译器宏,例如://SomeClass.h-afileIwanttoimportinC++andObjectice-Cclasses#ifCPLUSPLUS#import"CPlusPlusLibrary.h"#endif@interfaceSomeClass:BaseClass{#ifCPLUSPLUSCPlusPlusClass*variable;#endif}@end 最

c++ - 如何对无符号长数使用宏?

这是我的代码:#defineMSK0x0F#defineUNT1#defineN3000000000unsignedcharaln[1+N];unsignedcharpileup[1+N];voidset(unsignedlongi){if((aln[i]&MSK)!=MSK){aln[i]+=UNT;}}intmain(void){}当我尝试编译它时,编译器会这样提示:tmp/ccJ4IgSa.o:Infunction`set':bitmacs.c:(.text+0xf):relocationtruncatedtofit:R_X86_64_32Sagainstsymbol`aln'd

c++ - 使用编译器定义的宏连接

这应该很简单,但我正在努力弄明白。我有PROJECT_NAME作为编译器(g++)-D定义,我想将它与其他一些文本连接起来以形成命名空间名称。我目前的做法是:#defineVERSION_NAMESPACEPROJECT_NAME##Versioning对于我当前的项目,我希望VERSION_NAMESPACE为Syren_DLLVersioning。相反,我得到一个编译器错误:error:'PROJECT_NAMEVersioning'hasnotbeendeclared但是根据g++调用,PROJECT_NAME被正确定义:ccacheg++...-DPROJECT_NAME=Sy

c++ - 如何为宏符号添加前缀?

我正在寻找标题中所述问题的一般解决方案。但作为例证考虑我的真实情况。我想得到wstring,像这样:L"hello"但是当我有一个宏时:#defineMACRO(S)...和一个电话:MACRO("hello")//noLprefix如何像以前一样定义它来获取wstring?LS被视为2个符号。 最佳答案 您需要粘贴运算符,查找预处理器的#和##以获得激动人心的新机会来解决问题并创造有趣的新问题。http://www.cprogramming.com/reference/preprocessor/token-pasting-oper

宏DO直到SAS循环

我的循环只是进行1次迭代。我应该创建三个宏变量:如果qtr=qtr1,则VAR1=月1,var2=个月2和var3=个月3。我的循环仅创建var1=个月1,当我用put语句检查时,i=1。它只是进行一次迭代,所以我不确定我在做什么错。%Letqtr=qtr1;%MacroFirstqtr(qtr);%LetI=1;%If&qtr=qtr1%then%do%until(&I>3);%Letvar&I=Month&I;%letI=%eval(&I+1);%end;%MendFirstqtr;%Firstqtr(qtr);看答案鉴于您为宏的QTR参数提供的输入,您的%do循环永远不会运行。您可以打开

c++ - 如何修改 Visual Studio 2015 预定义宏?

我正在尝试修改VisualStudio2015中的预定义环境宏。具体来说:VC_IncludePath我可以看到它和它的值,但我不能修改它。我没有看到这样做的选项。 最佳答案 您可以编辑此文件:C:\ProgramFiles(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Common.props 关于c++-如何修改VisualStudio2015预定义宏?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么宏 __STL_FUNCTION_TMPL_PARTIAL_ORDER 应该将模板函数包含在 std_pair.h 中

今天在STL_pair.h中看到如下代码:#ifdef__STL_FUNCTION_TMPL_PARTIAL_ORDERtemplateinlinebooloperator!=(constpair&__x,constpair&__y){return!(__x==__y);}templateinlinebooloperator>(constpair&__x,constpair&__y){return__y我不认为模板函数与偏特化有任何关联的功能模板。我错了吗? 最佳答案 编译器如何处理函数调用在C++中调用函数模板经历了名称查找(标准

c - 我怎样才能与 C 预处理器连接两次并扩展一个宏,如 "arg ## _ ## MACRO"?

我正在尝试编写一个程序,其中一些函数的名称取决于某个宏变量的值,宏变量如下:#defineVARIABLE3#defineNAME(fun)fun##_##VARIABLEintNAME(some_function)(inta);不幸的是,宏NAME()把它变成了intsome_function_VARIABLE(inta);而不是intsome_function_3(inta);所以这显然是错误的做法。幸运的是,VARIABLE的不同可能值的数量很少,所以我可以简单地执行#ifVARIABLE==n并分别列出所有情况,但是有没有聪明的方法来做到这一点? 最

c++ - 通过宏安全地传递模板参数逗号?

我目前正在使用宏来更简洁地声明相对较长的部分专用模板类列表。以下是一些过于简化的示例:#defineINSTANTIATE_MYTYPE(freeargs,specialization,myvalue)\template\structMyType{staticconstboolvalue=myvalue;}如果我在每种情况下都没有要传递的逗号,这就可以正常工作:INSTANTIATE_MYTYPE(typenameT,std::vector,true);如果我有逗号通过单级宏扩展,它有一个可以容忍的解决方法:#defineMacroComma,INSTANTIATE_MYTYPE(ty