什么是这个C/C++代码的惯用Python等价物?
void foo()
{
static int counter = 0;
counter++;
printf("counter is %d\n", counter);
}
Run Code Online (Sandbox Code Playgroud)
具体来说,如何在功能级别实现静态成员,而不是类级别?将函数放入类中会改变什么吗?
在C中,可以声明具有局部函数范围的静态变量(示例).
朱莉娅可以做类似的事吗?
我的用例是声明子函数,但不希望Julia每次执行代码时都必须重新解析它们.在函数之外声明它们是丑陋的并且给它们更高的范围,我想避免它.
例:
function foo(x)
static bar = t -> stuff with t
...
bar(y)
...
end
Run Code Online (Sandbox Code Playgroud)
虽然我可以在foo()之外声明bar(),但我更喜欢bar只在本地命名空间中.
谢谢.
根据我的理解,每个被调用的函数在程序堆栈中都有一些分配给它的内存,即使同一个函数递归调用自身(即每个调用在程序堆栈中都有自己的内存),这也是正确的.请回答以下两个问题:
如果变量在函数中声明为static,那么同一个变量/同一个副本是否会用于该函数的所有递归调用?
如果变量未声明为static(例如,简单地称为"int x"),那么对函数的每个递归调用是否都有自己的变量副本?如果是,那是从其他函数调用函数时通常会发生的方式,包括递归调用吗?
#include<stdio.h>
#include<stdlib.h>
int main()
{
static int x=0;
x++;
printf("Team %d\n",x);
if(x<10)
main();
else
exit;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Team 1
Team 2
Team 3
Team 4
Team 5
Team 6
Team 7
Team 8
Team 9
Team 10
Run Code Online (Sandbox Code Playgroud) 绊倒这个问题并在这里阅读更多(c ++,但这个问题在C/C++ AFAIN中的作用相同)我没有提到函数内部真正发生的事情.
void f(){
static int c = 0;
printf("%d\n",c++);
}
int main(){
int i = 10;
while(i--)
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这个片段中,c
生命周期是程序的整个执行,因此该行static int c = 0;
在下一次调用中没有意义,f()
因为c
已经是已定义的(静态)变量,并且赋值部分也已过时(在下次调用中f()
),因为它只在第一次发生.
那么,编译器做了什么?不把它分割f
成2个功能- f_init, f_the_real_thing
其中f_init
初始化和f_the_real_thing
版画,并调用1次f_init
,并从该年起,只要求f_the_real_thing
?
随着static
在C
一个能保持一个stack
变量四周,创建功能甚至存在了.
但是,在这种情况下,
void static_func() {
static int var = 1;
var += 1;
}
Run Code Online (Sandbox Code Playgroud)
我可以访问var
外部static_func()
并返回其值.我们假设static_func()
在该中调用三次main()
,则值为var
3.
但是,1
每次执行该功能时都会设置它.为什么我仍然得到3的价值?!