在裸机环境下类似stdlib的库?(内存管理和希望能支持pthread)
是否有裸机编程的类似stdlib的库? 我正在尝试为裸机环境构建一个程序(应该在Linux上构建).该程序取决于stdlib和posix lib(malloc,calloc,realloc,free和pthread用法).无论如何,我都会为单程修改. 我正在阅读 解决方案 对于内存分配功能,您应该能够适应 doug lia>公共领域DLMALLOC实施.阅读文件以获取详细信息,但是您需要为MORECORE提供一个请求大量内存的函数 - 如果您使用裸金属,那么这可能只需返回连续的块,始于加载代码的位置上方的连续块.
0 2024-04-10
编程技术问答社区
C ++仅在不存在的情况下才能编写文件
我想打开一个使用标准库写作的文件,但是如果文件已经存在,则文件打开. 根据我在文档中可以阅读的内容,Ofstream :: Open只允许附加或截断. 我当然可以尝试打开阅读以检查文件是否存在,并重新打开以进行编写,但不能保证该文件不会由中间的另一个过程创建. 有人可以在标准库(std :: iostream)或c函数(文件* functions) 的情况下确认这是C ++不可能的 解决方案 由于C11(因此也在C ++ 17中),对于fopen,您可以使用模式"x" - 独家模式,请参见 this : 文件访问模式标志" x"可以选择将附加到" W"或" W+" 指定器.此标志迫使函数如果存在,则函数失败, 而不是覆盖它. 其他解决方案 没有fstream这样做的方法,但是std::fopen的C ++与std::sin一样多. 如果您绝对必须具有此文件的fstream对象,并且需要原子检查,则应首先致电fopen,然后成功,fclose和f
8 2024-04-08
编程技术问答社区
一个C++标准库头可以包括一个C标准头吗?
我只能在标准的N4582草案中找到 [res.on.headers/1] C ++标头可能包括其他C ++标头. 似乎没有指定C ++标头是否可以包括C标准标头. 如果允许使用,即使不包含此标头,也不必使用C标准标头中定义的全局名称(因为该程序可能会隐式通过某些C ++标准标头隐式包含标头)? 解决方案 出于您跟进的问题(名称冲突)的目的,是的,当然可以.原因是C ++标准库包括C标准库内容的 c ++标头,并且该标准明确允许这些标准也可以在全局名称空间中提供名称(除了在::std中提供强制性提供它们之外) . 此外,基于C ++标准的附件D [DEPR],C标准库标题(版本)也是C ++标准库的一部分(尽管已弃用了).这意味着[res.on.headers]/1允许C ++标头包含它们. 其他解决方案 部分使26 C标准标头的一部分是C ++的一部分.因此,这些是C ++的一部分.还有许多其他C标头遵守语言的共享子集(可
0 2024-04-08
编程技术问答社区
为什么我的 srand(time(NULL)) 函数在 c 语言中每次都生成相同的数字?
因此,我正在创建一个可以调用功能并返回0或1的程序(0含义尾巴和1个含义),然后用它来打印100个翻转的结果. 似乎很简单,以为我可以使用srand(time(null))与种子不断变化的种子播种.这是我的第一个裂缝. #include #include int flip(); int main(void) { int heads = 0; int tails = 0; for (short int count = 1; count
0 2024-04-07
编程技术问答社区
为什么C++ stdlib rand()函数在不同平台上对同一种子给出不同的值?
我了解rand()函数会根据给定的种子生成伪随机数,并且在给定平台上它将始终从同一种子中生成相同的数字序列,我想知道的是为什么它在使用同一库的平台上提供了不同的序列? IE. rand()如何实现? 解决方案 C ++标准未指定用于rand()函数的算法. 该功能是由谁在您的系统上编写标准库的人定义的:Visual Studio包含的标准库的Microsoft,以及与GCC包装的标准库的GNU家伙. 您的编译器正在选择其从库中获取库的位置,因此您可能在同一系统上的不同编译器具有不同版本的标准库.重点保持不变:规范保证了可用的功能以及它们的工作;不是他们如何做. 其他解决方案 rand()函数应计算一系列伪随机整数 在[0,{rand_max}]的范围内,至少为2^32. rand_r()函数应计算一系列伪随机 范围内的整数[0,{rand_max}]. ({rand_max}的值 宏至少为32767.) 如果rand_r()的对象的初始值相同
2 2024-04-07
编程技术问答社区
malloc和calloc怎么会有不同的签名?
可能的重复: Calloc为什么Calloc仅进行两个参数,而Malloc只有一个? 资源有 描述malloc和calloc之间功能差异的资源,但我无法轻易找到描述不同功能签名背后历史记录的一个: void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); 当然,前者中的size是每个成员的大小.也许的想法是,可以通过操作系统懒惰地进行多个页面大小的成员大小calloc? (我可以构成原因和下一个家伙 - 如果没有引用的来源,就没有接受的答案.:-) ) 解决方案 这对C规范中使用的语言的解释有些开放. 这里的语言似乎非常仔细地选择-Malloc在第7.20.3.3节中定义了: malloc函数分配了大小为对象的空间 按大小指定,其价值不确定. 早期在第3.14节中定义了一个对象为: 在执行环境中的数据存储区域, 其内容可以表示值 cal
2 2024-04-07
编程技术问答社区
std::assert的情况如何?
这个答案 ,这是多重复的,这表明我应该使用#include 我拉的#include 我拉从C ++代码中,我应该用std::*来调用它们. 我一直在这样做,但是我注意到一个例外. std::assert即使我正确地#include . ,似乎也没有定义 这里发生了什么?这是实现监督还是实际例外? 解决方案 assert是宏,而不是函数.因此,需要与普通的旧assert(condition)一起使用. 这是一个支持链接: http://en.cppreference.com/w/cpp/错误/断言. 其他解决方案 assert是一个宏,因此不可能将其限制为名称空间.
0 2024-04-07
编程技术问答社区
max(a,b)是否在stdlib.h中定义?
我正在使用两台计算机,每台都有不同版本的Visual Studio.在Visual Studio 2008计算机上我的代码编译.在Visual 2010计算机上,我的代码不会编译,因为我使用的是宏观max(a,b),据我所知,该>在stdlib.h中定义了.我不能仅仅定义max(a,b),因为它将是Visual 2008计算机上的重新定义.但是,如果我不定义max(a,b)我的代码不会在Visual 2010计算机上编译. 任何解决方案? 解决方案 在其标准标头中定义max宏的任何C库都超出了想象.幸运的是,如果您需要支持此类平台,那么一个简单的方法是#undef max(以及其定义的任何其他有问题的宏),包括系统标头和任何自己的标头/代码. 请注意,其他所有人都在说将您的定义包裹在#ifndef max ... #endif中.这是不是一个好主意.在系统标题中定义max表明实施者是无能的,并且某些环境的某些版本可能具有不正确的宏(例如,没有适当地使用括号,括号,括号
0 2024-04-07
编程技术问答社区
C语言中的函数free()对我不起作用
我一直在尝试使用free(). 它可以自由的一些结构,但它们以某种方式留下了一些结构,它们也与孩子保持联系.它也永远不会释放二进制树的根(gRootPtr). 我正在使用Xcode来找出二进制树使用的内存是否已释放,还使用IF语句. 我用来释放内存的代码: void FreeMemory(InfoDefiner *InfoCarrier) { if ((*InfoCarrier) != NULL) { FreeMemory((&(*InfoCarrier)->left)); FreeMemory((&(*InfoCarrier)->right)); free((*InfoCarrier)); } } 代码我用来查看是否已释放内存. if (gRootPtr != NULL) { return 1; } else{ return 0; } 解决方案 首先,Free不会更改 P
0 2024-04-07
编程技术问答社区
不包括stdlib.h并不产生任何编译器错误!
希望这是一个非常简单的问题.以下是我拥有的C PGM(test.c). #include //#include int main (int argc, char *argv[]) { int intValue = atoi("1"); double doubleValue = atof("2"); fprintf(stdout,"The intValue is %d and the doubleValue is %g\n", intValue, doubleValue); return 0; } 请注意,我正在使用stdlib.h的atoi()和atof(),但我不包括该标头文件.我编译了PGM(GCC Test.C),没有编译器错误! 我运行PGM(./a.out),这是输出,这是错误的. The intValue is 1 and the doubleValue is 0 现在,我包
0 2024-04-06
编程技术问答社区
使用fscanf读行
嗨,我有一个文件,其中包含以下行: wwa weweweof ewewe wdw: 1 11 ms
0 2024-04-06
编程技术问答社区
strtok坏了吗?还是仅仅是棘手的问题?
是strtok毫无希望的破坏了吗? 在许多有关C中的文本延伸的问题上,有人会建议使用strtok, 一个常见的答复是,strtok永远不应使用,它是无可救药的. 一些海报声称strtok的问题仅限于多线程问题,并且在单线程环境中是安全的. 正确的答案是什么? 它可以工作吗? 它无可救药吗? 您可以用示例备份答案吗? 解决方案 是,strtok也是无可救药的, 即使在一个简单的单线程程序中 ,我将用一些示例代码证明此失败: 让我们从一个简单的文本分析仪功能开始,以收集有关文本句子的统计信息,使用strtok. 此代码将导致不确定的行为. 在此示例中,句子是一组被空间,逗号,半彩和时期分开的单词. // Example: // int words, longest; // GetSentenceStats("There were a king with a large jaw and a queen with a plain
0 2024-04-06
编程技术问答社区
使用fscanf()读取一行的问题
我正在尝试使用以下代码读取一行: while(fscanf(f, "%[^\n\r]s", cLine) != EOF ) { /* do something with cLine */ } 但是,以某种方式我每次都只能获得第一行.这是阅读一行的糟糕方式吗?我应该解决什么以使其按预期工作? 解决方案 使用fscanf()函数几乎是一个坏主意,因为它可以将您的文件指针留在失败的未知位置. 我更喜欢使用fgets()将每一行进入,然后sscanf().然后,您可以在发现合适的情况下继续检查读取的行.类似: #define LINESZ 1024 char buff[LINESZ]; FILE *fin = fopen ("infile.txt", "r"); if (fin != NULL) { while (fgets (buff, LINESZ, fin)) { /* Process buff here. */ }
0 2024-04-06
编程技术问答社区
为什么没有int128_t?
许多编译器提供了128位整数类型,但是我使用的任何编译器都没有提供Typedefs int128_t.为什么? 据我所记得,标准 为此目的int128_t int128_t 鼓励实施提供这样类型的实施,以提供Typedef 要求此类实施提供至少128位的intmax_t (而且,我不相信我使用的实现实际上符合最后一点) 解决方案 我将参考C标准;我认为C ++标准从C. 继承了/的规则 我知道GCC在某些平台上实现了128位签名和未签名的整数,并使用名称__int128和__int128(__int128是实现定义的关键字). 即使对于提供标准128位类型的实现,标准也不需要定义 int128_t或uint128_t.引用第7.20.1.1.1节的第7.20.1.1节C标准: 这些类型是可选的.但是,如果实施提供 宽度为8、16、32或64位的整数类型,没有填充位, (对于签名类型)具有两个补充的 表示,
2 2024-04-06
编程技术问答社区
填补结构,同时寻找最小元素,C++
我想在找到最小元素时填充一些结构.请在下面找到代码 tyoedef struct Point { double x, y; }Point; 我有vector of points - std::vector V,其中我有几千分. 还有另一个结构我有 typedef struct cart { Point pt; double val_1; // computed using only Pt double val_2; // computer using only Pt }cart; 现在我有两个任务: 我需要从结构v. 中找到最小元素 填充结构卡车,该车直接取决于v. 我可以使用以下代码进行此操作. std::vector vCart; for(unsigned i = 0; i
0 2024-04-02
编程技术问答社区
错误:对超载距离的调用是模糊的
我有一些代码(我没有编写,但是正在尝试编译) - iostream_combo.cc - ,这样做给我以下错误: ./moses/moses/comboreduct/combo/iostream_combo.cc: In function ‘std::__cxx11::string opencog::combo::l2ph(const string&, const std::vector >&)’: ./moses/moses/comboreduct/combo/iostream_combo.cc:543:64: error: call of overloaded ‘distance(std::vector >::const_iterator, __gnu_cxx::__normal_iterator
0 2024-04-02
编程技术问答社区
c++ max_element 每n个元素
是否可以在比较每个n元素的容器中找到最大元素并返回索引.使用STL,Boost或...另一个Lib? 使用每个n,我的意思是使用std :: max_element,但要将增加的增加从++首先,第一个 += n; 更改 // based on std::max_element #ifndef NEWTON_ALGORITHM_SEARCH_MAX_INDEX_HPP #define NEWTON_ALGORITHM_SEARCH_MAX_INDEX_HPP #include #include namespace newton { // SAME THAT STD::MAX_ELEMENT template const ForwardIt max_index(ForwardIt first, ForwardIt last, C
2 2024-04-02
编程技术问答社区
对于一个特定的std::bind,返回的数据类型到底是什么?
首先,我必须说我必须知道std :: bind. 的返回数据类型 我有一个定义为 的结构 typedef struct { UINT ID; CString NAME; boost::any Func;// 'auto' doesn't work here } CALLBACK; CALLBACK CallBackItems[]; func是一个功能支架,我希望它具有不同种类的回调功能. 在某个地方我初始化这样的回调: CallBackItems[] = { { 1, L"OnReady", std::bind(&CPopunderDlg::OnReady, pDlg) }, { 2, L"CustomFunction",std::bind(&CPopunderDlg::OnFSCommond, pDlg,_1,_2) } //...................
0 2024-04-02
编程技术问答社区