using声明与using编译指令code and 双冒号作用域运算符 and C语言与C++ const修饰全局变量的区别

208 阅读1分钟

using声明与using编译指令code

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>  
using namespace std;

namespace king
{
	int sunId = 1;
}

namespace xyj
{
	int sunId = 3;
}
void testCout01()
{
	int sunId = 2;
	//1.using 声明 告诉编译器我要使用King下的sunId(直接告诉编译器用哪个东西)
	//using king::sunId;

	//当using声明与就近原则同时出现时会出错,尽量避免
	cout << sunId <<endl;
}

void testCout02()
{
	//int sunId = 2;
	//2.using 编译指令 告诉编译器打开哪一个空间
	using namespace king;
	using namespace xyj;
	//当using编译指令有多个,需要加作用域区分
	// 当就近原则和using编译指令一起出现的时候,优先就近原则
	// 如果就近没有,那就从房间里面去找
	cout << king::sunId << endl;
	cout << xyj::sunId << endl;
}
int main()
{
	testCout01();
	testCout02();
	system("pause");
	return EXIT_SUCCESS;

}

双冒号作用域运算符

#define _CRT_SECURE_NO_WARNINGS
解决C4996错误的方法之一
#define _CRT_SECURE_NO_WARNINGS //解决C4996错误 传统的c函数在vs环境会报错
//可以将你该代码中的所有scanf替换成scanf_s(strcpy等等以前C常用的方法),
//即可避免出现该错误;也可以加上面那个宏
#include<iostream>  
#include <stdio.h>
using namespace std;

int num = 1005; // 全局变量

void numCout()
{
	int num = 6;

	// 输出局部的 num
	cout <<"num为多少:" << num << endl;

	//双冒号 作用域运算符   :: 全局作用域
	cout << "全局的num为多少:" << ::num << endl;
}

int main()
{
	numCout();
	system("pause");
	return EXIT_SUCCESS;

}

C语言与C++ const修饰全局变量的区别

一、C语言下const修饰全局变量默认是外部链接属性

在C语言下 const 默认是外部链接属性,
所以可以在其他文件中被使用

1.test.c

//在test.c中定义一个全局变量m_a
const int m_a = 1000;

2.main.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	//在C语言下const 可以在其他文件中使用
	//告诉编译器外部有一个变量m_a 在其他文件中
	//如果找不到会在链接阶段报错“无法解析的外部命令”
	extern const int m_a;

	printf("%d\n", m_a);
	system("pause");
	return EXIT_SUCCESS;

}

二、C++下const修饰全局变量默认是内部链接属性

在C++下 const 默认是内部链接属性,所以只能本文件中使用;
要想在其他文件中使用,可以使用 extern 关键字来提高作用域

1.test.cpp

const int m_b = 1005;// 默认是内部链接属性
//所以导致只能在本文件中才可以使用此变量m_b
//在其他文件中找不到

//但是有解决方法 在const 前面 + 关键字 extern 提高作用域(C语言隐式前面有extern)
extern const int m_c = 1005;

2.main.cpp

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>  
using namespace std;

int main()
{
	//extern const int m_b;
	extern const int m_c;

	//cout << "m_b:" << m_b;
	cout << "m_c:" << m_c << endl;

	system("pause");
	return EXIT_SUCCESS;

}