类似的代码例如(a+=1)%=7;,其中 a 是一个int变量。
我们知道运算符+=or=不是序列点,因此我们在两个相邻的序列点之间有两个副作用。(我们这里使用的是cpp98的序列点规则)
然而,赋值运算符喜欢+=或=保证在赋值后返回左值,这意味着执行顺序在某种程度上是“定义的”。
那么这是一种未定义的行为吗?
c++ undefined-behavior sequence-points language-lawyer c++98
我试图在 IPython 中执行 C 代码(使用 ctypes),但每次调用 C 函数时 IPython 都会崩溃。
文件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 的解决方法?