小编sax*_*one的帖子

__CC_ARM,__ ICCARM __,__ GNNUC__和__TASKING__宏是什么意思?

我正在通过stm研究STM32l151rct6a,我偶然发现了这些MACRO定义

__CC_ARM, __ICCARM__, __GNUC__, __TASKING__
Run Code Online (Sandbox Code Playgroud)

有谁知道他们的意思?

c embedded microcontroller data-structures

7
推荐指数
1
解决办法
1万
查看次数

检查符号位的位置是否足以确定 IEEE-754 浮点数相对于整数字节序的字节序?

我最近编写了一些代码,用于memcpyfloat/解包double为适当宽度的无符号整数,然后使用一些位移将符号位与组合的有效数字/指数分开。

\n
\n

注意:对于我的用例,我不需要将后两部分彼此分开,但我确实需要它们以正确的顺序排列,即:{sign, (exponent, significand)},后一个元组包装为足够宽度的无符号整数。

\n
\n

我的代码运行良好,经过彻底测试,没有任何问题;然而,我有点震惊地发现 IEEE-754 没有指定其二进制交换格式 \xe2\x80\x94 的字节顺序,据我所知,这意味着我的位移位在极少数情况下float endianness \xe2\x89\xa0 integer endianness

\n

根据此处回答的问题,我的假设是,鉴于位移位与存储中的实际字节序无关,我只需要担心浮点数的字节序是否与整数的字节序匹配。
\n我松散地遵循链接答案中的代码设计了以下代码,但避免通过指针强制转换使用类型双关,这对我来说似乎是未指定/未定义的行为领域:

\n
#include <cstdint>\n#include <cstring>\n\n// SAME means "same as integer endianness"\nenum class FloatEndian { UNKNOWN, SAME, OPPOSITE, };\n\nFloatEndian endianness() {\n    float check = -0.0f; // in IEEE-754, this should be all-zero significand and exponent with sign=1\n    std::uint32_t view;\n    std::memcpy(&view, &check, sizeof(check));\n    switch (view) {\n    case 0x80000000: // sign …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point portability endianness ieee-754

7
推荐指数
1
解决办法
151
查看次数

使用指向 FILE 类型的 const 指针是个好主意吗?

通常,C 文件 I/O 是使用完成的,FILE*因为这是标准库函数都采用的。

在 C 中,也可以有一个const 指针指针的地址不能改变(但它指向的值可以)。

我想知道这是否可以应用于FILE*,所以写了这个小程序来测试这个:

#include <stdio.h>


int main(void) {
    FILE* const file = fopen("somefile.txt", "w");
    if (file != NULL) {
        fprintf(file, "%s\n", "So this works? That's just swell!");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这可以很好地编译并使用 GCC 在 Ubuntu/Linux 16.04 上按预期工作(该文件包含我预期的字符串),但我不确定这个习语是否是一个好主意 - 该FILE类型在设计和处理上是不透明的是特定于实现的。

因为不能保证任何 C 库实现都不会尝试更改FILE指针的地址,所以在 C 中执行 I/O 时不使用这种方法是否更安全?

c file-io pointers const-pointer c-standard-library

5
推荐指数
1
解决办法
493
查看次数

为什么 MSVC 说对虚拟 constexpr 函数调用运算符的调用不会产生常量表达式?

我有一个包装数组的类。它继承自一个抽象基类,virtual constexpr为函数调用运算符定义一种方法。在子类中,我重写所述方法并访问内部数组:

\n
#include <cstddef>\n#include <array>\n#include <initializer_list>\n\ntemplate <typename T, std::size_t N>\nclass ContainerBase {\npublic:\n    virtual constexpr const T& operator()(std::size_t i) const = 0;\n};\n\ntemplate <typename T, std::size_t N>\nclass Container : public ContainerBase<T, N> {\npublic:\n    constexpr Container(std::initializer_list<T> data) {\n        std::copy(data.begin(), data.end(), _items.begin());\n    }\n    constexpr const T& operator()(std::size_t i) const override {\n        return _items[i];\n    }\nprivate:\n    std::array<T, N> _items;\n};\n\nint main () {\n    constexpr Container<int, 3> C = {2, -91, 7};\n    constexpr int F = C(1);\n\n    static_assert(F == -91);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是Godbolt 链接。 …

c++ visual-c++ compiler-bug constexpr c++20

5
推荐指数
1
解决办法
156
查看次数

如何共享我的C/C++项目并隐藏一些源代码?

我想分享我用C/C++(Linux环境gcc/g ++编译器)编写的项目作为共享库/静态库而不实际共享源代码.这样其他用户就可以在不知道我的源代码的情况下使用我的项目.任何人都可以告诉我如何以.so/.a格式分享它?

假设,我的项目看起来像:

main.cpp, source1.cpp, source2.cpp, source3.cpp, head1.h, Makefile

如何通过隐藏文件source1.cpp,source2.cppsource3.cpp的源代码并将它们作为共享库/静态库来共享此项目.main.cpp文件包含main()函数.告诉我详细的程序.

PS:我是共享库/静态库的新手.

c c++ unix shared-libraries static-libraries

3
推荐指数
1
解决办法
369
查看次数

C:使用 char 比使用 int 更快吗?

由于 char 只有 1 个字节长,因此在处理 8 位 unsigned int 时使用 char 是否更好?

示例:我试图创建一个结构来存储颜色的 RGB 值。

struct color
{
  unsigned int r: 8;
  unsigned int g: 8;
  unsigned int b: 8;
};
Run Code Online (Sandbox Code Playgroud)

现在由于它是 int,所以在我的例子中它分配了 4 个字节的内存。但如果我用 unsigned char 替换它们,它们将按预期占用 3 个字节的内存(在我的平台中)。

c performance types integer char

0
推荐指数
1
解决办法
460
查看次数