C/C++开发
我正在寻找从 RGB 到 HSV 的颜色空间转换器,特别是对于两个颜色空间的 0 到 255 范围. 解决方案 我已经使用这些很长时间了 - 现在不知道它们来自哪里......注意输入和输出,除了角度以度为单位,范围为 0 到 1.0. 注意:此代码不会对输入进行真正的健全性检查.谨慎行事! typedef struct {双 r;//0 到 1 之间的分数双 g;//0 到 1
..
如何让 printf 显示枚举类型变量的值?例如: typedef enum {Linux, Apple, Windows} OS_type;OS_type myOS = Linux; 而我需要的是类似 printenum(OS_type, "我的操作系统是 %s", myOS); 必须显示字符串“Linux",而不是整数. 我想,首先我必须创建一个值索引的字符串数组.但我不知道这是
..
我知道内联是对编译器的提示或请求,用于避免函数调用开销. 那么根据什么可以确定一个函数是否适合内联呢?在哪种情况下应该避免内联? 解决方案 避免函数调用的成本只是故事的一半. 做: 使用 inline 而不是 #define 非常小的函数非常适合内联:更快的代码和更小的可执行文件(更多机会留在代码缓存中) 这个函数很小并且经常被调用 不要: 大型函数:导致
..
在本主题中,我们将研究 goto 在 C 或 C++ 中的良好使用示例.它的灵感来自一个人们投票赞成的答案,因为他们以为我在开玩笑. 总结(标签从原来的改变使意图更加清晰): infinite_loop://代码在这里转到无限循环; 为什么它比替代方案更好: 这是具体的.goto 是语言结构导致无条件分支.备择方案依赖于使用结构支持条件分支,带有退化的永远真实条件. 标签记录意图
..
包含的意义是什么 ios_base::sync_with_stdio(false);cin.tie(NULL); 在 C++ 程序中? 在我的测试中,它加快了执行时间,但是否有我应该担心的测试用例包含这个? 这两个语句是否总是必须在一起,还是第一个就足够了,即忽略cin.tie(NULL)? 此外,如果其值已设置为 false,是否允许同时使用 C 和 C++ 命令?
..
我是 Windows 编程的新手,在阅读了 Petzold 的书后,我想知道: 使用 TCHAR 类型和 _T() 函数来声明字符串还是我应该只使用 wchar_t 函数的好习惯> 和 L"" 字符串在新代码中? 我将只针对 Windows 2000 及更高版本,并且我的代码从一开始就是 i18n. 解决方案 如果我今天在做一个新项目,我仍然会使用 TCHAR 语法.使用它和
..
令我惊讶的是,我刚刚发现 MS Visual Studio 2003 以上缺少 C99 stdint.h.我相信他们有他们的理由,但有谁知道我可以在哪里下载副本?没有这个标题,我就没有有用类型的定义,比如 uint32_t 等. 解决方案 原来您可以从以下位置下载此标题的 MS 版本: https://github.com/mattn/gntp-send/blob/master/in
..
当我运行我的 (C++) 程序时,它会因为这个错误而崩溃. * glibc 检测到 * ./load: double free or corruption (!prev):0x0000000000c6ed50 *** 如何追踪错误? 我尝试使用打印 (std::cout) 语句,但没有成功.gdb 能让这更容易吗? 解决方案 如果你使用 glibc,你可以将 MALLOC
..
我想找到检查标准 C++11、14、17 或 C 中是否存在文件的最快方法.我有数千个文件,在对它们执行某些操作之前,我需要检查是否所有文件都存在存在.我可以在下面的函数中写什么来代替 /* SOMETHING */ ? inline bool 存在(const std::string& name){/* 某物 */} 解决方案 好吧,我拼凑了一个测试程序,该程序运行这些方法中的每一种 10
..
有没有办法以独立于平台的方式从 C/C++ 确定一台机器有多少个内核?如果不存在这样的东西,那么按平台(Windows/*nix/Mac)确定它怎么样? 解决方案 C++11 #include //无法检测时可能返回0const auto processor_count = std::thread::hardware_concurrency(); 参考:std::thread::har
..
我在 Pointer Arithmetic 中读了一点,我发现了两件事我不明白,也不知道它的用途 address_expression - address_expression 还有 address_expression >地址表达式 谁能给我解释一下,它们是如何工作的以及何时使用. 编辑: 我想说的是如果我只取两个地址并减去它们会产生什么 如果我取两个地址并比较它们是什
..
写入以文本模式打开但在二进制模式下没有发生的文件时会发生什么转换?特别是在 MS Visual C 中. 无符号字符缓冲区[256];for (int i = 0; i 二进制模式: FILE *fp_binary = fopen(filename, "wb");fwrite(缓冲区,大小,计数,fp_binary); 与文本模式: FILE *fp_text = fopen(file
..
这个我知道. 从 C++ 调用 C 函数: 如果我的应用程序是用 C++ 编写的,而我必须从用 C 编写的库中调用函数.那么我会使用 //main.cppextern "C" void C_library_function(int x, int y);//原型C_library_function(2,4);//直接使用. 这不会破坏名称 C_library_function 并且链
..
我知道这对极客来说似乎很基础.但我想说清楚. 当我想使用 Win32 DLL 时,通常我只调用像 LoadLibrary() 和 GetProcAdderss() 这样的 API.但是最近在用DirectX9开发,需要添加d3d9.lib、d3dx9.lib等文件. 我已经听够了 LIB 用于静态链接而 DLL 用于动态链接. 所以我目前的理解是 LIB 包含方法的实现,并在链接
..
我想这个问题说明了一切. 我想在 Windows 上分叉.最相似的操作是什么,如何使用. 解决方案 Cygwin 有全功能的 fork()在 Windows 上.因此,如果您可以接受使用 Cygwin,那么在性能不成问题的情况下,问题就解决了. 否则你可以看看Cygwin是如何实现fork()的.来自相当古老的 Cygwin 架构 doc: 5.6.流程创建Cygwin
..
我希望开发一组 C API,这些 API 将环绕我们现有的 C++ API 以访问我们的核心逻辑(用面向对象的 C++ 编写).这本质上是一个胶水 API,允许我们的 C++ 逻辑被其他语言使用.有哪些好的教程、书籍或最佳实践介绍了将 C 封装在面向对象的 C++ 中所涉及的概念? 解决方案 这并不难手工完成,但取决于界面的大小.我所做的案例是在纯 C 代码中启用我们的 C++ 库,因此
..
静态库和共享库有什么区别? 我使用 Eclipse 并且有几种项目类型,包括静态库和共享库?一个比另一个有优势吗? 解决方案 共享库是 .so(或在 Windows .dll 中,或在 OS X .dylib 中)文件.与库相关的所有代码都在这个文件中,并且在运行时被使用它的程序引用.使用共享库的程序只引用它在共享库中使用的代码. 静态库是 .a(或在 Windows 中的 .
..
如果有一些跨平台的 C/C++ 代码应该在 Mac OS X、iOS、Linux、Windows 上编译,我如何在预处理过程中可靠地检测它们? 解决方案 有大多数编译器使用的预定义宏,你可以找到列表 此处.GCC 编译器预定义宏可以在此处找到.以下是 gcc 的示例: #if 已定义(WIN32) ||已定义(_WIN32) ||已定义(__WIN32__) ||定义(__NT__)//
..
我想计算 ab mod n 以用于 RSA 解密.我的代码(如下)返回不正确的答案.有什么问题吗? unsigned long int解密2(int a,int b,int n){unsigned long int res = 1;for (int i = 0; i
..
下面的程序将字符串转换为long,但根据我的理解,它也会返回错误.我所依赖的事实是,如果 strtol 成功地将字符串转换为 long,那么 strtol 的第二个参数应该等于 NULL.当我使用 55 运行以下应用程序时,我收到以下消息. ./convertToLong 55无法将 55 转换为 long 并且剩余的字符串是:55 as long is 55 如何从 strtol 中成功检测
..