小编Avi*_*ohn的帖子

您是否必须将`u`后缀附加到无符号整数?

我知道u后缀的意思是“未签名”。但是以下代码中有必要吗?

uint32_t hash = 2166136261u;
Run Code Online (Sandbox Code Playgroud)

是问题还是惯例?还是在这种情况下有任何技术意义?该值无论如何都应转换为无符号,因为它uint32_t是无符号的。

什么时候应该,什么时候不应该将u后缀用于无符号整数值?

c variables unsigned literals

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

Python模块的大小是否有限制?

Python模块的大小是否有限制?

在我看来,Python字节码指令POP_JUMP_IF_FALSE采用1字节操作数,告诉它要跳转的指令索引。

引用ceval.c(注释我的)一些相关的CPython代码:

case TARGET(POP_JUMP_IF_FALSE): {
    PREDICTED(POP_JUMP_IF_FALSE);
    PyObject *cond = POP();
    int err;
    if (cond == Py_True) {
        Py_DECREF(cond);
        FAST_DISPATCH();
    }
    if (cond == Py_False) {
        Py_DECREF(cond);
        JUMPTO(oparg);  # <--- this
        FAST_DISPATCH();
    }
Run Code Online (Sandbox Code Playgroud)

这是否意味着Python模块不能包含超过255个字节码指令?我在这里想念什么?

python interpreter bytecode

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

将指针数组设置为NULL的标准方法是什么?

请考虑这样的堆分配的指针数组:

Thing** array = malloc(sizeof(Thing*) * array_length);
Run Code Online (Sandbox Code Playgroud)

如何设置其所有成员为NULL

我当然可以这样做:

for (int i = 0; i < array_length; i++) {
    array[i] = NULL;
}
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有一个标准功能。

SO主要提到memset,但是我不确定在此用例下是否可以保证在所有平台上都可以使用,因为据我所知,它是逐字节而不是逐元素地遍历数组。

同样更普遍的是,将任何类型的数组(T可以是任意大小)中的所有值设置为某个特定值的标准方法是什么?

c arrays

7
推荐指数
2
解决办法
156
查看次数

为什么 git rebase 会触发合并冲突?

我已经克隆了一个远程存储库,创建了一个新分支b并开始工作并进行提交。我也推动了这个b分支,但我是唯一一个在这方面工作的人。

一段时间后,我想在远程主分支上重新设置本地分支的基础,只是为了与系统可能发生的更改同步。请注意,我确信我是唯一处理这些特定文件的人。

所以我做了

git fetch --all
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)

然后 Git 通知我合并冲突。

现在,我可以轻松地手动解决冲突,但我很烦恼:为什么会发生合并冲突?

如果我没有记错的话,整个想法git rebase就是在指定分支的顶端“重放”当前分支的所有提交。我是唯一一个处理过这些特定文件或这个特定分支的人。

那么为什么会发生这种情况呢?我的做法有问题吗?

git rebase git-merge-conflict

7
推荐指数
2
解决办法
1691
查看次数

Java 8 - 接口是否不再是抽象的?

到目前为止,Java中的接口无法实现任何方法.根据定义,它们只是没有正文的方法签名的集合.

但似乎这改变了Java 8.

这是真的?什么是'默认方法'?什么是"功能界面"?有人在乎向我解释这个吗?谷歌上的事情非常令人困惑.

java interface abstract java-8

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

为什么我们不能在堆栈上分配动态内存?

在堆栈上分配内容非常棒,因为我们拥有RAII并且不必担心内存泄漏等问题.但是有时我们必须在堆上分配:

  • 如果数据真的很大(推荐) - 因为堆栈很小.

  • 如果要分配的数据大小仅在运行时已知(动态分配).

两个问题:

  1. 为什么我们不能在堆栈上分配动态内存(即只在运行时已知的大小的内存)?

  2. 为什么我们只能通过指针引用堆上的内存,而堆栈上的内存可以通过普通变量引用?即Thing t;.

编辑:我知道一些编译器支持可变长度数组 - 这是动态分配的堆栈内存.但这确实是一般规则的例外.我有兴趣理解为什么一般来说,我们不能在堆栈上分配动态内存的基本原因 - 技术原因和它背后的理性.

c++ heap stack pointers memory-management

6
推荐指数
3
解决办法
2826
查看次数

当对象在内存中移动时,指针如何保持有效?

想象一下CI在堆上分配两个结构.其中一个结构有一个字段,其中包含指向另一个结构的指针.

据我所知,堆中的数据可能会移动,因此事物的地址会发生变化.例如,可能会发生堆上的碎片整理,将第二个结构移动到堆中的其他位置.

这有助于理解我所说的内容 https://en.m.wikibooks.org/wiki/Memory_Management/Memory_Compacting

这个结构的重点现在是错误的(即保持错误的内存地址).

我并不是说这个问题是C的特定问题,而是更一般的问题:在任何时候,平台都可能决定改变一切.指针如何保持有效?

c memory pointers

6
推荐指数
2
解决办法
339
查看次数

如何配置Kivy应用程序?

我正在使用Kivy制作游戏.我遇到了性能问题所以我决定对该程序进行分析.

我尝试通过以下方式运行它:

python -m cProfile main.py
Run Code Online (Sandbox Code Playgroud)

应用程序屏幕保持黑色.几秒钟后,异常崩溃程序:

 Traceback (most recent call last):
   File "c:\python27\Lib\runpy.py", line 162, in _run_module_as_main
     "__main__", fname, loader, pkg_name)
   File "c:\python27\Lib\runpy.py", line 72, in _run_code
     exec code in run_globals
   File "c:\python27\Lib\cProfile.py", line 199, in <module>
     main()
   File "c:\python27\Lib\cProfile.py", line 192, in main
     runctx(code, globs, None, options.outfile, options.sort)
   File "c:\python27\Lib\cProfile.py", line 49, in runctx
     prof = prof.runctx(statement, globals, locals)
   File "c:\python27\Lib\cProfile.py", line 140, in runctx
     exec cmd in globals, locals
   File "main.py", line 26, in <module>
     GameApp().run()
   File …
Run Code Online (Sandbox Code Playgroud)

python profiling kivy

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

是否可以配置 Notepad++ 以使用 Intellij 键盘映射?

我从 PyCharm IDE(使用 Intellij 键盘快捷键)转向 N​​otepad++ 以学习 C。

我希望 Notepad++ 具有与我在 PyCharm 中熟悉的快捷键相同的功能。是否有捷径可寻?一些导入键映射功能?或者我必须手动配置所有快捷方式?

ide keyboard editor notepad++

6
推荐指数
0
解决办法
1201
查看次数

“结构继承”如何不违反严格的别名规则?

C 中的“结构继承技术”(如本问题所述)是由于以下事实而成为可能的:C 标准保证结构的第一个成员在它之前永远不会有任何填充(?),并且结构的地址第一个成员始终等于结构本身的地址。

这允许如下使用:

typedef struct {
    // some fields
} A;

typedef struct {
    A base;
    // more fields
} B;

typedef struct {
    B base;
    // yet more fields
} C;

C* c = malloc(sizeof(C));
// ... init c or whatever ...
A* a = (A*) c;
// ... access stuff on a etc.
B* b = (B*) c;
// ... access stuff on b etc.
Run Code Online (Sandbox Code Playgroud)

这个问题有两个部分:

答:在我看来,这种技术打破了严格的别名规则。我错了吗?如果错了,为什么?

B. 假设这种技术确实合法。在这种情况下,如果A:我们首先将对象存储在其特定类型的左值中,然后将其向下或向上转换为不同的类型,或者B:如果我们将其直接转换为所需的特定类型,这会有所不同吗?此刻,而不首先将其存储在特定类型的左值中?

例如,这三个选项都同样合法吗?

选项1: …

c standards struct

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