草庐IT

c++ - 您如何处理平台之间变化的整数的 native 大小?

恐怕我已经知道了这个问题的答案,但我想确定...我有一个相当大的项目,它有一个typedef原生类型的头文件:typedefunsignedlongintu32;typedefsignedlongints32;//etc...不可避免的事情已经发生,我现在正尝试在long是64位而不是32位的系统上编译。修复它的最佳方法是什么?我可以使用int(或来自stdint.h的int32_t/uint32_t)来typedef满足我所知道的平台上的32位大小,但这似乎仍然值得怀疑。printf样式函数也存在问题,其中使用了%ld(编译器提示并希望看到%d)。这些都必须更改,不是吗(也许在int

c++ - 在 Objective-C 代码中使用 extern "C"的链接器错误

我正在尝试创建一些可以从iPhone应用程序中的Objective-C和C++代码调用的实用函数。我有无法编译为ObjectiveC++(.mm)的第三方C++类。我有一个声明我的函数的头文件,然后是一个定义它们的.c文件。我已经检查了三次拼写错误,但出于某种原因,我的链接器无法找到任何函数的定义。这是C辅助函数的header:#ifndefFILE_LOADER_H#defineFILE_LOADER_H#if__cplusplusextern"C"{#endifvoid*loadDataFromFile(constchar*szFilename,boolbDocument);voi

c++ - 有效删除 tr1::unordered_map 中的元素

我正在试验tr1::unordered_map并偶然发现了如何解决这个问题有效地删除元素。“删除”方法提供按键删除或通过迭代器。我认为后者更有效率,因为前者大概涉及隐式查找操作。另一方面,我的调查网上有透露迭代器调用后可能会失效insert()方法。我对典型的现实世界情况感兴趣,其中将对象放入哈希表有一个足够长的生命周期,以便在此期间调用insert()生命周期。因此我可以得出结论,在这种情况下,按键删除是唯一的还剩选项?有没有其他方法可以更有效地删除对象?我是充分意识到这个问题只在发生删除的应用程序中很重要经常。我当前的项目是否会出现这种情况,还有待观察,但是我宁愿在设计我的项目时了

php - 使用 zeromq 实现 Task Farm 消息传递模式

我正在使用zeromq解决涉及数百(可能数千)个客户端请求任务的问题。每个客户端都会请求执行特定任务,完成后,结果将返回给发出该请求的客户端。这些是我到目前为止已经确定的Actor,在我想出的模式中:客户:这是请求执行工作单元(或“工作”)的参与者Controller:这是在可用引擎之间平衡“作业”的角色引擎:这是从Controller接收作业请求并将结果发布回客户端的参与者。我还没有弄清楚引擎如何将消息返回给客户端。我猜想使用zeromq实现它的一种方法是:Client:PUSHjobmessagesononesockettoControllerSUBscribetocomplete

c++ - 我在哪里可以找到涵盖 K&R1/2、C89-C1X 及其来源的 C(和/或 C++)关键字列表?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我接触过许多编码指南,每一个指南都给出了命名“事物”的指南。一个特定的C89命名规则引发了这个问题:明确禁止对变量使用名称“new”,因为在C++中这是一个关键字。这让我开始考虑下一个标准,C99有很好的文档记录,但C11相对较新(20

c++ - 任何程序都会检测到 C/C++ 结构中的缓冲区溢出吗?

考虑以下程序:structabc{intx[5];inty[5];};intmain(){structabctest;test.y[0]=10;printf("%d",test.x[5]);}(借自Isitlegaltooverrunoneelementofastructtoviewanother?)BoundsChecker不会将此检测为溢出。是否有任何程序可以检测此类编程错误? 最佳答案 clang确实如此,即使没有打开特殊标志:$clangexample.c-oexampleexample.c:13:18:warning:ar

c++ - 将 fpos_t 转换为 int 或 char

我正在使用一个对文件长度使用位运算的函数:fpos_tflen;当我尝试将其转换为int或char,或尝试对其进行算术运算时,它失败并出现以下编译错误:错误:在需要整数的地方使用了聚合值 最佳答案 您在滥用该类型。首先,它不代表长度。它代表一个位置。其次,它仅用于调用fsetpos。您不打算对其进行算术运算,因为它不一定代表数字类型。它包含您的库执行fsetpos操作所需的任何信息。在您的库的实现中,fpos_t似乎是一种聚合类型,例如结构。(您可以检查头文件中的定义以确保确定,但不要依赖您在那里发现的任何内容;它可能会在其他平台或

c# - IDE 条件 block 突出显示

设置:假设我有一个相当大的程序,并且正在使用#defines和各种包含/排除各种代码片段的方法。即假设我有一段这样的代码example_file.c:include#ifdefTHISdosomethingreallycoolhere#ifdefTHATdosomethingevencooler#endif#endif定义文件.c:#defineTHATTRUE#defineTHISFALSE现在我不知道这两个语句是否会被包含或使用,除非我查看定义。上面是一个简单的示例,但假设您有50个ifdef,并且它们以不同的方式嵌套,要追踪这50个值中的每一个值是什么有点麻烦。问题:是否存在一个

c++ - 在 C++ 中初始化 C 结构

我正在创建一堆C结构,因此我可以封装要通过dllc接口(interface)传递的数据。这些结构有很多成员,我希望它们有默认值,这样就可以只指定少数几个成员来创建它们。据我了解,结构需要保持C风格,因此不能包含构造函数。创建它们的最佳方法是什么?我在想工厂? 最佳答案 structFoo{staticFoomake_default();};工厂是矫枉过正。当您想要创建给定接口(interface)的实例时使用它,但实现的运行时类型在创建站点上不是静态已知的。 关于c++-在C++中初始化

c++ - 从类返回指针。谁负责删除?

我有一个实现二进制兼容接口(interface)(用作共享库)的C++类,因此只返回C类型。作为constchar*的字符串、void指针和指向具有二进制兼容接口(interface)的其他类的指针。问题是我应该如何组织内存管理,我应该返回指向现有类数据的常量指针(用户使用过时指针的危险),然后自己释放内存,或者指向一些堆变量的指针并让用户负责删除这些指针后来,还是???是否有一些通用准则? 最佳答案 在“二进制兼容接口(interface)”中,使用C接口(interface),您不假设共享堆。因此,从堆中分配内存的一方是将其返回