小编inv*_*rse的帖子

(a=1)=2 在 C++98 中是未定义的行为吗?

类似的代码例如(a+=1)%=7;,其中 a 是一个int变量。

我们知道运算符+=or=不是序列点,因此我们在两个相邻的序列点之间有两个副作用。(我们这里使用的是cpp98的序列点规则)

然而,赋值运算符喜欢+==保证在赋值后返回左值,这意味着执行顺序在某种程度上是“定义的”。

那么这是一种未定义的行为吗?

c++ undefined-behavior sequence-points language-lawyer c++98

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

IPython 支持 ctypes 吗?

我试图在 IPython 中执行 C 代码(使用 ctypes),但每次调用 C 函数时 IPython 都会崩溃。

环境

  • 视窗 10(64 位)
  • Python 3.8.5 64 位
  • GCC 9.1.0 (tdm-gcc)

最小工作示例

文件test.c

int func(){
    return 10;
}
Run Code Online (Sandbox Code Playgroud)

在命令行中编译:

gcc -shared -o test.dll -fPIC test.c
Run Code Online (Sandbox Code Playgroud)

在同一目录中启动 IPython,然后运行:

In [1]: import ctypes
   ...: lib = ctypes.CDLL("test.dll")
   ...: lib.func()
Out[1]: 10
Run Code Online (Sandbox Code Playgroud)

输出Out[1]是正确的,但 IPython 在Out[1]: 10打印后立即崩溃。(有时它会在Out[1]: 10打印之前崩溃)

IPython 支持 ctypes 吗?

如果是,为什么会出现上述问题?

如果不是这样,是否有在 IPython/Jupyter Notebook 中使用 ctypes 的解决方法?

更新

  • 在 WSL 上尝试了相同的代码(在同一台机器上);IPython 没有崩溃。
  • 尝试了 …

python ctypes ipython jupyter-notebook

5
推荐指数
0
解决办法
71
查看次数