64,282
社区成员
发帖
与我相关
我的任务
分享
[root@VM_0_9_centos extern]# cat main.cpp
#include<iostream>
void test1(){
extern const char const_var[100];
std::cout<<const_var<<std::endl;
}
const char const_var[100] = "文件作用域.main.cpp";
void test2(){
extern const char const_var[100];
std::cout<<const_var<<std::endl;
}
int main(){
test1();
test2();
return 0;
}
[root@VM_0_9_centos extern]# ./a.out
全局作用域
文件作用域.main.cpp
[root@VM_0_9_centos extern]#
[root@VM_0_9_centos extern]# cat var_def.cpp
const char const_var[100] = "全局作用域";
[root@VM_0_9_centos extern]# cat main.cpp
#include<iostream>
void test1(){
extern const char const_var[100];
std::cout<<const_var<<std::endl;
}
const char const_var[100] = "文件作用域.main.cpp";
void test2(){
extern const char const_var[100];
std::cout<<const_var<<std::endl;
}
int main(){
test1();
test2();
return 0;
}
[root@VM_0_9_centos extern]# g++ main.cpp var_def.cpp
/tmp/ccUZyhQQ.o: In function `test1()':
main.cpp:(.text+0x5): undefined reference to `const_var'
collect2: error: ld returned 1 exit status
[root@VM_0_9_centos extern]#
[root@VM_0_9_centos src]# cat extern_.cpp
extern const double const_var3;
int main(){
extern const double const_var3; //链接正常
std::cout<<const_var3<<std::endl;
return 0;
}
const double const_var3 = 33.33;
[root@VM_0_9_centos src]# g++ extern_.cpp
extern_.cpp: In function ‘int main()’:
extern_.cpp:6:2: error: ‘cout’ is not a member of ‘std’
std::cout<<const_var3<<std::endl;
^
extern_.cpp:6:25: error: ‘endl’ is not a member of ‘std’
std::cout<<const_var3<<std::endl;
^
[root@VM_0_9_centos src]#
[root@VM_0_9_centos src]# cat extern.cpp
#include<iostream>
int main(){
extern int a;
return 0;
}
[root@VM_0_9_centos src]# g++ extern.cpp
[root@VM_0_9_centos src]# ./a.out
[root@VM_0_9_centos src]#
[root@VM_0_9_centos src]#
[root@VM_0_9_centos src]# vi extern.cpp
[root@VM_0_9_centos src]# cat extern.cpp
#include<iostream>
int main(){
extern int a;
return 0;
}
const int a = 100;
[root@VM_0_9_centos src]# g++ extern.cpp
[root@VM_0_9_centos src]# ./a.out
[root@VM_0_9_centos src]# vi extern.cpp
[root@VM_0_9_centos src]# cat extern.cpp
#include<iostream>
int main(){
extern const int a;
std::cout<<"a = "<<a<<std::endl;
return 0;
}
const int a = 100;
[root@VM_0_9_centos src]# g++ extern.cpp
/tmp/ccThZOdz.o: In function `main':
extern.cpp:(.text+0xb): undefined reference to `a'
collect2: error: ld returned 1 exit status
[root@VM_0_9_centos src]#
const double const_var3 = 33.33;
int main(){
extern const double const_var3; //链接正常
return 0;
}
int main(){
extern const double const_var3; //链接异常
return 0;
}
const double const_var3 = 33.33;
extern const double const_var3;
int main(){
extern const double const_var3; //链接正常
return 0;
}
const double const_var3 = 33.33;
int main(){
extern const double const_var3; //链接正常
return 0;
}
extern const double const_var3 = 33.33;
结论:
1. const定义的变量的作用域是文件级别的,并且是从定义位置处开始的。
2. extern const 定义的变量为可外链的全局const变量。
3. 有extern但没有初始化的变量为变量声明。
extern const int ecp = 99;
const int cp = 99;
static const int scp = 99;
int g_i = 9;
static int sg_i = 9;
0000000000000000 R ecp
0000000000000004 r _ZL2cp
0000000000000008 r _ZL3scp
0000000000000000 D g_i
0000000000000004 d _ZL4sg_i
从
const int cp = 99;
static const int scp = 99;
0000000000000004 r _ZL2cp
0000000000000008 r _ZL3scp
就可以看出 const 和 static 具有同样的效果,符号类型一样,符号名一样
extern const int ecp = 99;
const int cp = 99;
int g_i = 9;
static int sg_i = 9;
0000000000000000 R ecp
0000000000000004 r _ZL2cp
0000000000000000 D g_i
0000000000000004 d _ZL4sg_i