SOME_PREPROCESSOR_DEFINE
全部标签 使用#define优于const(反之亦然)有哪些优点和缺点?当我读到有关糟糕的编程实践(尤其是魔数(MagicNumber))时,我发现自己更频繁地使用#define。一些问题突然出现在我的脑海中,例如:大量使用#define不好吗?是否占用内存空间?使用const会更快吗?我读了一些关于这个的内容,但我仍然不确定,据我所知:#define定义了一个宏(不确定宏是什么意思),它处理预处理。在处理代码之前,它将已定义关键字的所有实例替换为其他内容。另一方面,const是变量,其值不能在运行时中途更改。我能想到使用const的唯一原因是该值是否依赖于其他变量。例如:#definePI3.
Libcurl使用以下定义电子邮件收件人:#defineRECIPIENT""但是如果我不想对收件人进行硬编码怎么办?我希望用户能够提供他/她自己的电子邮件地址,所以我需要找到一种方法来做到这一点:std::stringemailreceiver="bla@bla.com";#defineRECIPIENT=emailreceiver收件人用在这一行:rcpt_list=curl_slist_append(rcpt_list,RECIPIENT);我假设我不能简单地将其更改为std::stringemailreceiver="bla@bla.com";rcpt_list=curl_sl
我正在为我的一个项目构建一个C++DLL。我正在尝试标准化类的定义方式。所以不是每次都写:class__declspec(dllexport)ClassName我正在构建一个#define宏来简化这个过程:#defineCLASS(cName)class__declspec(dllexport)cName但是,当我使用它时,它给了我以下错误:Error:Expecteda';'我知道您可以使用#define宏来定义整个类的创建,但它是否可以仅用于定义“类头”?谢谢,请记住,我尝试这样做是因为我们要处理数百个类,所以这些“自动化”将是最有帮助的:)编辑:例子:#defineCLASS(n
下面是我理解的静态多态性的一个非常简单的例子。我不使用动态多态性的原因是我不想阻碍op中PROCESSOR函数的内联。templatevoidop(PROCESSOR*proc){proc->doSomething(5);proc->doSomethingElse();}intmain(){ProcessorYpy;op(&py);return0;}这个例子的问题是:没有明确定义PROCESSOR必须定义什么函数。如果缺少一个,你只会得到一个编译错误。我认为这是不好的风格。它还有一个非常实际的缺点:IDE的在线帮助当然不能向您显示该对象上可用的功能。定义PROCESSOR的公共(pub
我正在尝试通过swig将我的C++代码移植到Python。当我完成py、pyd、cxx和lib文件的构建时,在Python(命令行)下,我键入“模块Dnld”,它显示->导入错误:动态模块未定义初始化函数。以下是我的代码,进一步:添加我的构建步骤以避免误解,谢谢MarkTolonen文件->新建->项目->Windows控制台应用程序->选择DLL和空项目(无unicode)将我的SerialComm文件夹添加到项目中(包括DownloaderEngine.hSerial.hPortEnumerator.h等)。配置属性->c/c++->附加包含目录->C:\Python27\incl
我在实现一个简单的TCP服务器时遇到了困难。以下代码摘自boost::asioexamples,准确地说是“Http服务器1”。voidconnection::start(){socket_.async_read_some(boost::asio::buffer(buffer_),boost::bind(&connection::handle_read,shared_from_this(),boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));}voidconnection::ha
是否可以使用#include更改包含的库?或#include"foo"在预占有期间变成不同的东西,所以它会充当不同的库,例如#include?我有一个无法使用当前#include的库只在一种情况下声明,但在其他地方工作正常,所以我不想直接改变它。是否可以使用#define解决这个问题? 最佳答案 有两种方法可以做到这一点。更简单、更明显的方法:#defineINCLUDE_FOO//...#ifdefINCLUDE_FOO#include#else#include#endif还有更短但更挑剔的方式:#defineFOO_HEADER
如何使用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
我在一个C++程序中找到了一段代码,好像每隔for()循环两次。在这个程序中循环,但为什么在这样的预处理器定义中需要第三个for呢?#defineforfor(intz=0;z 最佳答案 它取代了for与for(intz=0;z.显然,那会变成for(inti=0;i进入for(intz=0;z因此创建了两个嵌套循环。没有那个额外的for会是for(intz=0;z这显然是不正确的。请注意,即使您在问题中提供的形式是“正确的”,但这并不意味着它是“良好做法”。这是过度滥用宏的示例,必须避免。这是它可能出错的众多示例之一:for(in
我正在努力从弗兰肯斯坦和一个文件数千行的程序转变为结构良好、组织良好的多文件程序。现在看起来很自然(天真)的是为我的三个文件制作一个包含标题的三角恋:file_1包括file_2、file_4file_2包括file_3、file_4file_3包括file_1....等等等等这些文件具有我在其他文件之间需要的变量、方法、结构等。当然,我遇到了双重包含错误。我的问题:我应该通过在header中使用预处理器指令(例如,完全在header中包括结构、方法等)来避免这些问题,还是应该使用makefile进行编译(我hear也可以用来解决这个问题---但我从来没有做过)?