小编Ale*_*ira的帖子

在编译为unsigned时,C编译器是否可以更改位表示?

是否有可能的,比方说,一个显式类型转换int32_tuint32_t,改变值的位表示?

例如,鉴于我有以下联合:

typedef union {
    int32_t signed_val;
    uint32_t unsigned_val;
} signed_unsigned_t;
Run Code Online (Sandbox Code Playgroud)

规范保证这些代码段是否具有相同的行为?

uint32_t reinterpret_signed_as_unsigned(int32_t input) {
    return (uint32_t) input;
}
Run Code Online (Sandbox Code Playgroud)

uint32_t reinterpret_signed_as_unsigned(int32_t input) {
    signed_unsigned_t converter;
    converter.signed_val = input;
    return converter.unsigned_val;
}
Run Code Online (Sandbox Code Playgroud)

我在这里考虑C99.我已经看到了一些类似的问题,但他们似乎都在讨论C++,不C.

c c99 language-lawyer

8
推荐指数
1
解决办法
704
查看次数

如何拥有Vim多行语法高亮子句?

我正在尝试为包含三种不同类型的列表元素(分别以 - ,o和x开头)的小文本格式编写语法高亮模块,并且我想基于它们的类型突出显示条目.对于单行来说很容易,我只是使用了一个syn match myGroup /^\s\+- .\+/而且我已经完成了.

问题是,我一直在尝试这样做,以便没有列表标记的下一行保持与起始列表项行相同的颜色,但没有成功.我一直试图用语法区域来做,但我似乎无法理解它们是如何工作的.

更确切地说,这是我想要达到的输出: 在此输入图像描述

如果文件格式需要进行任何更改以便更容易/可能,我可以自由更改它.

任何线索我怎么能得到它?

vim vim-syntax-highlighting

6
推荐指数
1
解决办法
865
查看次数

玩具垃圾收集:运营商新/删除足够吗?

我正在研究我的一个学习项目(在C中),并考虑将其迁移到C++以获得额外的学习点.它的一部分涉及一个特定系列对象的垃圾收集系统,在C中,我通常使用一个大的malloc/mmap实现并使用简单的天真标记和扫描(我可以识别引用和类似的东西)已经).

我的问题是我正在考虑将这个想法转移到C++,但对我对其内存管理方案的理解感到不够安全.

到目前为止,我考虑分配一个大内存池并在基类上重载operator new和delete来调用我的内存池的抓取/释放函数,然后让垃圾收集器的扫描阶段删除它们看到的对象.够了吗?我在这里看不到有什么隐藏的陷阱?

编辑:澄清一下,我已经能够计算出已分配对象的生命周期,因此不需要使用gc abi.这些对象很少被c ++代码操纵,并且使用它们的代码能够通知他们正在使用它们而无需检查堆栈.

c++ garbage-collection new-operator

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