C/C++开发

1 字节!= 8 位的系统?

我一直在读这样的句子 不要依赖 1 个字节的大小为 8 位 使用 CHAR_BIT 而不是 8 作为常量在位和字节之间转换 等等.今天有哪些现实生活系统,这适用于哪些地方?(我不确定 C 和 C++ 在这方面是否存在差异,或者它是否实际上与语言无关.如有必要,请重新标记.) 解决方案 在较旧的机器上,小于 8 位的代码相当普遍,但其中大部分已经消失多年了. C 和 ..
发布时间:2021-12-02 08:17:30 C/C++开发

什么是无符号字符?

在 C/C++ 中,unsigned char 用于什么?它与普通的 char 有何不同? 解决方案 在 C++ 中,有三种不同的字符类型: char 有符号的字符 无符号字符 如果您为 text 使用字符类型,请使用不合格的 char: 它是字符文字的类型,如 'a' 或 '0'(仅在 C++ 中,在 C 中它们的类型是 int) 它是组成C字符串的类型,如"ab ..
发布时间:2021-12-02 08:15:48 C/C++开发

为什么C和C++中main函数的类型留给用户定义?

为什么 main() 是用户定义的函数? 我什么时候使用 void main() 和 int main()? 解决方案 EDIT 这个答案并不完整,因为它没有真正解决奇怪的句子“或其他实现定义的方式".我现在写了一个更完整的答案它还解决了 C90、C11 和 C++.编辑结束 以下是 C 标准的说明(ISO C 9899:1999): 5.1.2.1 独立环境 在一 ..
发布时间:2021-12-02 08:15:13 C/C++开发

int 的大小是否取决于编译器和/或处理器?

整数的大小是否取决于编译器、操作系统和处理器? 解决方案 这个问题的答案取决于我们愿意得到的实际考虑有多远. 最终,理论上,C 和 C++ 中的一切都依赖于编译器,并且只依赖于编译器.硬件/操作系统根本不重要.编译器可以自由地实现任何厚度的硬件抽象层,并且可以完全模拟任何东西.没有什么可以阻止 C 或 C++ 实现实现任何大小和任何表示的 int 类型,只要它足够大以满足语言标准中指 ..
发布时间:2021-12-02 08:14:56 C/C++开发

静态常量与#define

使用 static const 变量比使用 #define 预处理器更好吗?或者这取决于上下文? 每种方法的优点/缺点是什么? 解决方案 就个人而言,我讨厌预处理器,所以我总是使用 const. #define 的主要优点是它不需要内存来存储您的程序,因为它实际上只是用文字值替换一些文本.它还有一个优点是它没有类型,所以它可以用于任何整数值而不会产生警告. “const" ..
发布时间:2021-12-02 08:14:10 C/C++开发

陷阱表示

什么是 C 中的“陷阱表示"(一些示例可能会有所帮助)?这适用于 C++ 吗? 鉴于此代码... float f=3.5;int *pi = (int*)&f; ... 并假设 sizeof(int) == sizeof(float),f 和 *pi 是否具有相同的二进制表示/模式? 解决方案 陷阱表示是 C99(IIRC 不是 C89)使用的一个包罗万象的术语,用于描述适合 ..
发布时间:2021-12-02 08:12:22 C/C++开发

C 逗号运算符的使用

你看到它在 for 循环语句中使用,但它在任何地方都是合法的语法.如果有的话,您在其他地方发现了它的哪些用途? 解决方案 C 语言(以及 C++)在历史上是两种完全不同的编程风格的混合,可以将其称为“语句编程"和“表达式编程"".如您所知,每种过程式编程语言通常都支持诸如排序和分支之类的基本结构(请参阅结构化编程).这些基本结构以两种形式出现在 C/C++ 语言中:一种用于语句编程,另一种 ..
发布时间:2021-12-02 08:10:20 C/C++开发

使用 GCC 在可执行文件中嵌入资源

我正在寻找一种方法,可以在 GCC 编译的 C/C++ 应用程序中轻松嵌入任何外部二进制数据. 我想做的一个很好的例子是处理着色器代码 - 我可以将它保存在源文件中,例如 const char* shader = "source here"; 但这非常不切实际. 我希望编译器为我做这件事:在编译(链接阶段)时,读取文件“foo.bar"并将其内容链接到我的程序,以便我能够以二进制形式访 ..
发布时间:2021-12-02 08:10:10 C/C++开发

sizeof(some pointer) 总是等于四吗?

例如:sizeof(char*) 返回 4.与 int*、long long* 一样,我尝试过的一切.这有什么例外吗? 解决方案 你得到的保证是 sizeof(char) == 1.没有其他保证,包括不保证 sizeof(int *) == sizeof(double *). 实际上,指针在 16 位系统上的大小为 2(如果你能找到的话),在 32 位系统上为 4,在 64 位系统上 ..
发布时间:2021-12-02 08:08:48 C/C++开发

结构或联合中的“无符号临时:3"是什么意思?

可能的重复: 这段 C++ 代码是什么意思? 我正在尝试使用 JNA 将 C 结构映射到 Java.我遇到了一些我从未见过的东西. struct 定义如下: struct op{无符号操作类型:9;//--->这是什么意思?无符号 op_opt:1;未签名的 op_latefree:1;未签名的 op_latefreed:1;未签名的 op_attached:1;未签名的 op_s ..
发布时间:2021-12-02 08:08:31 C/C++开发

C 在哪里不是 C++ 的子集?

我在很多书中都读到 C 是 C++ 的一个子集. 有些书说 C 是 C++ 的子集,除了小细节. 在哪些情况下代码可以用 C 编译,但不能用 C++ 编译? 解决方案 如果将 C89 与 C++ 进行比较,那么这里有一些事情 C++ 中没有暂定定义 int n;国际n;//格式错误:n 已经定义 int[] 和 int[N] 不兼容(C++ 中没有兼容的类型) in ..
发布时间:2021-12-02 08:08:06 C/C++开发

如何在 C++ 中逐行迭代 cin?

我想逐行迭代 std::cin,将每一行作为 std::string 寻址.哪个更好: 字符串行;而 (getline(cin, line)){//处理线} 或 for (string line; getline(cin, line); ){//处理线} ?执行此操作的常规方法是什么? 解决方案 自从 UncleBen 提出他的 LineInputIterator,我想我会添加更多 ..
发布时间:2021-12-01 15:50:57 C/C++开发

如何使用 QueryPerformanceCounter?

我最近决定我的 Timer 类需要从使用毫秒更改为微秒,经过一些研究后,我认为 QueryPerformanceCounter 可能是我最安全的选择.(Boost::Posix 上的警告说它可能不适用于 Win32 API,这让我有点失望).但是,我不确定如何实现它. 我正在做的是调用我正在使用的任何 GetTicks() esque 函数并将其分配给 Timer 的 startingTic ..
发布时间:2021-12-01 15:50:48 C/C++开发

查找C++静态初始化顺序问题

我们在 静态初始化顺序方面遇到了一些问题惨败,我正在寻找方法来梳理大量代码以查找可能出现的情况.关于如何有效地做到这一点有什么建议吗? 编辑:关于如何解决静态初始化顺序问题,我得到了一些很好的答案,但这并不是我真正的问题.我想知道如何查找受此问题影响的对象.到目前为止,埃文的回答似乎是最好的;我不认为我们可以使用 valgrind,但我们可能有可以执行类似功能的内存分析工具.这只会在给定构建 ..
发布时间:2021-12-01 15:50:37 C/C++开发

如何使用 GCC 和 ld 删除未使用的 C/C++ 符号?

我需要严格优化我的可执行文件的大小(ARM 开发)并且我注意到在我当前的构建方案 (gcc + ld) 中未使用的符号没有被剥离. 将 arm-strip --strip-unneeded 用于生成的可执行文件/库不会改变可执行文件的输出大小 (我不知道为什么,也许是根本不能). 如何(如果存在)修改我的构建管道,以便从生成的文件中删除未使用的符号? 我什至不会想到这一点,但我当 ..
发布时间:2021-12-01 15:50:14 C/C++开发

提取文本 OpenCV

我正在尝试查找图像中文本的边界框,目前正在使用这种方法: //计算灰度图像的局部方差垫 t_mean, t_mean_2;垫灰色F;outImg_gray.convertTo(grayF, CV_32F);int winSize = 35;模糊(grayF,t_mean,cv::Size(winSize,winSize));模糊(grayF.mul(grayF), t_mean_2, cv::S ..
发布时间:2021-12-01 15:49:44 C/C++开发