我需要在我的c++程序中共享一些字符串。我应该使用#define还是const字符串?谢谢mystring1.h#definestr1"str1"#definestr2"str2"或者我的字符串2.hexternconststringstr1;externconststringstr2;我的字符串.cppconststringstr1="str1";conststringstr2="str2"; 最佳答案 更喜欢第二个选项。如果您使用第一个选项(预处理器),则会限制对象的灵active。考虑以下...您将无法以这种方式比较字符串:i
这条线是什么意思?特别是##是什么意思?#defineANALYZE(variable,flag)((Something.##variable)&(flag))编辑:还是有点迷茫。没有##会是什么结果? 最佳答案 Alittlebitconfusedstill.Whatwilltheresultbewithout##?通常您不会注意到任何差异。但是有不同。假设Something的类型为:structX{intx;};XSomething;然后看看:intX::*p=&X::x;ANALYZE(x,flag)ANALYZE(*p,fl
在不涉及血淋淋的细节的情况下,我想使用一个#define宏,该宏将扩展为一个#include但“#”符号会混淆预处理器(如它认为我想引用一个论点。)例如,我想做这样的事情:#defineMACRO(name)#include"name##foo"然后这样使用它:MACRO(Test)这将扩展为:#include"Testfoo"不起眼的#符号导致预处理器出错。MinGW给我以下错误:'#'后面没有宏参数我想我需要转义#符号,但如果这可能的话我不会。是的,宏确实是邪恶的…… 最佳答案 可以将哈希token插入到预处理的token流中。
我在许多最顶层的头文件中看到了下面的宏:#defineNULL0//C++03在所有代码中,NULL和0可以互换使用。如果我把它改成。#defineNULLnullptr//C++11会不会造成不良的副作用?我能想到的唯一(好的)副作用是以下用法会变得不正确;inti=NULL; 最佳答案 Ihaveseenbelowmacrointopmostheaderfile:你不应该看到的,标准库在中定义了它。(和)。而且,IIRC,根据标准,重新定义标准头文件定义的名称会导致未定义的行为。所以从纯粹的标准角度来看,你不应该这样做。我见过人
我知道我想在腿上开枪;)但是,它可以让我使其余(大量)代码更小且更具可读性。在另一个预处理器宏中创建预处理器宏有什么棘手的方法吗?这是我正在寻找的示例。我的真实场景更复杂//That'swhatIwanttodoandsurelyC++doesn'tlikeit.#defineMACROCREATER(B)#defineMACRO##BB+Bvoidfoo(){MACROCREATOR(5)//Thisshouldcreatenewmacro(#defineMACRO55+5)inta=MACRO5;//thiswillusenewmacro} 最佳答案
如果我在这样的命名空间中有#define语句:namespaceMyNamespace{#defineSOME_VALUE0xDEADBABE}我说#define语句不限于命名空间是否正确?以下是“正确”的做法吗?namespaceMyNamespace{constunsignedintSOME_VALUE=0xDEADBABE;} 最佳答案 正确,#define不受命名空间的约束。#define是preprocessor指令-它导致在通过编译器编译之前对源文件进行操作。命名空间在编译步骤中使用,编译器无法深入了解#define的内
我不是专家,所以请放轻松。这两个代码段有什么区别吗?#defineBIT3(0x1和#defineBIT3(0x1另外,有没有办法在一行中写第一个?这种多线样式的意义何在?下面的代码好吗?#defineBIT3(0x1 最佳答案 如果您有一个非常复杂的宏,如果它全部位于一行将难以阅读(尽管不建议使用非常复杂的宏),则多行宏很有用。通常,您可以使用续行字符\编写多行定义。.所以例如#defineMY_MACROprintf(\"Ilike%dtypesofcheese\n",\5\)但是你不能在你的第一个例子中做到这一点。你不能像那样
这是一个简单的问题,但为什么有人会使用#define来定义常量?有什么区别#definesum1和constintsum=1; 最佳答案 #define有许多不同的应用程序,但您的问题似乎是关于一个特定的应用程序:定义命名常量。在C++中,很少有理由使用#define来定义命名常量。#define通常在C代码中广泛使用,因为C语言在定义常量时与C++有很大不同。简而言之,constint对象在C中不是constants,这意味着在C中定义真正常量的主要方法是使用#define。(另外,对于int常量,可以使用枚举)。
#define在C++中有什么意义?我只看到了使用它代替“魔数(MagicNumber)”的示例,但我没有看到将值赋给变量的意义。 最佳答案 #define是C和C++的预处理器语言的一部分。在代码中使用它们时,编译器只需替换#define随心所欲地声明。例如,如果您厌倦了写作for(inti=0;i一直以来,您都可以执行以下操作:#definefori10for(inti=0;i如果你想要更通用的东西,你可以创建预处理宏:#definefori(x)for(inti=0;i如果您只想在某些特定构建中使用某些代码,它对于条件编译(#
我想获得使用Google中特殊功能(例如“定义:[短语]”)的搜索结果,但我似乎找不到与此相关的信息。有谁知道我可以在哪里获取JSON格式的数据(就像Google的其他API一样),而无需手动抓取结果页面?谢谢,以利 最佳答案 我希望我没有为此设置赏金,因为几天后我偶然发现了答案,这真的很简单。如果您想要爱的定义,请访问以下网址:http://www.google.com/dictionary/json?callback=a&sl=en&tl=en&q=love你会得到一个包含JSONP的响应流,内容如下(“美化”用于学习目的,AP