int g(int v);
static int i=20;
int x;
void f(int v)
{
x=g(v);
}
static int g(int p)
{
return i+p;
}
中 的函数g()的定义前面的static加与不加有什么区别li
难道表示静态函数?
8 个解决方案
#1
有区别;
因为i是一个静态的int 型变量,在函数g()中调用了变量i,所以g必须为静态函数,
因为只有静态函数方可调用静态变量
这是我个人的理解,如有错误,请楼下高手指正。。
因为i是一个静态的int 型变量,在函数g()中调用了变量i,所以g必须为静态函数,
因为只有静态函数方可调用静态变量
这是我个人的理解,如有错误,请楼下高手指正。。
#2
函数g()的定义前面的static加与不加
这是为了定义这个function的可见范围
如果有另外一个xxx.c文件
不加static,那么在xxx.c里能调用g(int);
加了static,那么在xxx.c中g(int)就是不可见的, 也就不能调用g(int);
这是为了定义这个function的可见范围
如果有另外一个xxx.c文件
不加static,那么在xxx.c里能调用g(int);
加了static,那么在xxx.c中g(int)就是不可见的, 也就不能调用g(int);
#3
newegg2002(天生我菜有X用) 说的不对,非static函数一样可以调用static变量的。
函数加static表示是本文件内使用的函数,不能在其他文件中访问。
函数加static表示是本文件内使用的函数,不能在其他文件中访问。
#4
加了static 是静态变量,静态变量只能作用于本文件,每个文件都可以有相同名字的静态变量而且互相独立。
不加static是全局变量,全局变量作用于整个程序, 整个程序只能有一个相同名字的全局变量。
函数前加static 是很老的c 标准,先在加和不加是一样的。
举个例子解释1:
//test.h
static int i = 0;
//test1.cpp
#include "test.h"
void inc() { i++; }
//test2.cpp
#include "test.h"
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
结果是什么? 2? 错了,结果是1,因为 test1.cpp 的i++ 和test2.cpp 的i++ 实际上操作的是不同的变量。
如果,把i 改成全局变量(去掉i 前面的 static), 结果是什么?结果是编译通过,但链接不通过,会报multiple definition of `i'.
把test1.cpp test2.cpp 改为以下,就可通过。
//test3.cpp
int i = 0; // 定义全局变量
void inc() { i++; }
//test2.cpp
extern int i; // 声明全局变量
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
这次程序结果是 2.
extern 只是声明一个全局变量,并没有分配内存。一个程序只能在一个文件里对一个全局变量定义一次,其他文件要用它,必须用extern 声明。
不加static是全局变量,全局变量作用于整个程序, 整个程序只能有一个相同名字的全局变量。
函数前加static 是很老的c 标准,先在加和不加是一样的。
举个例子解释1:
//test.h
static int i = 0;
//test1.cpp
#include "test.h"
void inc() { i++; }
//test2.cpp
#include "test.h"
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
结果是什么? 2? 错了,结果是1,因为 test1.cpp 的i++ 和test2.cpp 的i++ 实际上操作的是不同的变量。
如果,把i 改成全局变量(去掉i 前面的 static), 结果是什么?结果是编译通过,但链接不通过,会报multiple definition of `i'.
把test1.cpp test2.cpp 改为以下,就可通过。
//test3.cpp
int i = 0; // 定义全局变量
void inc() { i++; }
//test2.cpp
extern int i; // 声明全局变量
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
这次程序结果是 2.
extern 只是声明一个全局变量,并没有分配内存。一个程序只能在一个文件里对一个全局变量定义一次,其他文件要用它,必须用extern 声明。
#5
》函数前加static 是很老的c 标准,先在加和不加是一样的。
我指的是全局函数,不是类成员。
我指的是全局函数,不是类成员。
#6
static主要是在链接方面应于于function。
#7
对于楼主的例子,有还是没有static是没有区别的
static变量一样可以被其他cpp文件使用,只要在其中标注extern static ...
静态变量只是在类的内部才会特殊一些,是所有类对象所共享的
static变量一样可以被其他cpp文件使用,只要在其中标注extern static ...
静态变量只是在类的内部才会特殊一些,是所有类对象所共享的
#8
static 的两层含义,经常相互冲突:
1)存放在静态存储区,
2)对于特定的编译单位,static意味着内部连接,几控制名字的可见性只在这个单元或类里
对于任何函数或变量都尊从这两条原则:
1)存放在静态存储区,
2)对于特定的编译单位,static意味着内部连接,几控制名字的可见性只在这个单元或类里
对于任何函数或变量都尊从这两条原则:
#1
有区别;
因为i是一个静态的int 型变量,在函数g()中调用了变量i,所以g必须为静态函数,
因为只有静态函数方可调用静态变量
这是我个人的理解,如有错误,请楼下高手指正。。
因为i是一个静态的int 型变量,在函数g()中调用了变量i,所以g必须为静态函数,
因为只有静态函数方可调用静态变量
这是我个人的理解,如有错误,请楼下高手指正。。
#2
函数g()的定义前面的static加与不加
这是为了定义这个function的可见范围
如果有另外一个xxx.c文件
不加static,那么在xxx.c里能调用g(int);
加了static,那么在xxx.c中g(int)就是不可见的, 也就不能调用g(int);
这是为了定义这个function的可见范围
如果有另外一个xxx.c文件
不加static,那么在xxx.c里能调用g(int);
加了static,那么在xxx.c中g(int)就是不可见的, 也就不能调用g(int);
#3
newegg2002(天生我菜有X用) 说的不对,非static函数一样可以调用static变量的。
函数加static表示是本文件内使用的函数,不能在其他文件中访问。
函数加static表示是本文件内使用的函数,不能在其他文件中访问。
#4
加了static 是静态变量,静态变量只能作用于本文件,每个文件都可以有相同名字的静态变量而且互相独立。
不加static是全局变量,全局变量作用于整个程序, 整个程序只能有一个相同名字的全局变量。
函数前加static 是很老的c 标准,先在加和不加是一样的。
举个例子解释1:
//test.h
static int i = 0;
//test1.cpp
#include "test.h"
void inc() { i++; }
//test2.cpp
#include "test.h"
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
结果是什么? 2? 错了,结果是1,因为 test1.cpp 的i++ 和test2.cpp 的i++ 实际上操作的是不同的变量。
如果,把i 改成全局变量(去掉i 前面的 static), 结果是什么?结果是编译通过,但链接不通过,会报multiple definition of `i'.
把test1.cpp test2.cpp 改为以下,就可通过。
//test3.cpp
int i = 0; // 定义全局变量
void inc() { i++; }
//test2.cpp
extern int i; // 声明全局变量
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
这次程序结果是 2.
extern 只是声明一个全局变量,并没有分配内存。一个程序只能在一个文件里对一个全局变量定义一次,其他文件要用它,必须用extern 声明。
不加static是全局变量,全局变量作用于整个程序, 整个程序只能有一个相同名字的全局变量。
函数前加static 是很老的c 标准,先在加和不加是一样的。
举个例子解释1:
//test.h
static int i = 0;
//test1.cpp
#include "test.h"
void inc() { i++; }
//test2.cpp
#include "test.h"
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
结果是什么? 2? 错了,结果是1,因为 test1.cpp 的i++ 和test2.cpp 的i++ 实际上操作的是不同的变量。
如果,把i 改成全局变量(去掉i 前面的 static), 结果是什么?结果是编译通过,但链接不通过,会报multiple definition of `i'.
把test1.cpp test2.cpp 改为以下,就可通过。
//test3.cpp
int i = 0; // 定义全局变量
void inc() { i++; }
//test2.cpp
extern int i; // 声明全局变量
void inc(); //声明一下 inc 以便调用
void main()
{
i++;
inc();
printf("%d\n",i);
}
这次程序结果是 2.
extern 只是声明一个全局变量,并没有分配内存。一个程序只能在一个文件里对一个全局变量定义一次,其他文件要用它,必须用extern 声明。
#5
》函数前加static 是很老的c 标准,先在加和不加是一样的。
我指的是全局函数,不是类成员。
我指的是全局函数,不是类成员。
#6
static主要是在链接方面应于于function。
#7
对于楼主的例子,有还是没有static是没有区别的
static变量一样可以被其他cpp文件使用,只要在其中标注extern static ...
静态变量只是在类的内部才会特殊一些,是所有类对象所共享的
static变量一样可以被其他cpp文件使用,只要在其中标注extern static ...
静态变量只是在类的内部才会特殊一些,是所有类对象所共享的
#8
static 的两层含义,经常相互冲突:
1)存放在静态存储区,
2)对于特定的编译单位,static意味着内部连接,几控制名字的可见性只在这个单元或类里
对于任何函数或变量都尊从这两条原则:
1)存放在静态存储区,
2)对于特定的编译单位,static意味着内部连接,几控制名字的可见性只在这个单元或类里
对于任何函数或变量都尊从这两条原则: