以下代码无法编译:
#include <iostream>
#include <stdio.h>
int a=5;
char a='a';
int main(){ std::cout << a;}
Run Code Online (Sandbox Code Playgroud)
这是因为:
test.cpp:5:6: error: conflicting declaration ‘char a’
test.cpp:4:5: error: ‘a’ has a previous declaration as ‘int a’
Run Code Online (Sandbox Code Playgroud)
但是标准中规定的限制在哪里?我找不到它.请给我一个参考.
C++11§3.3.14
给定一个声明区域中的一组声明,每个声明区域指定相同的非限定名称,
- 它们都应指同一实体,或全部指功能和功能模板; 要么
- 正好一个声明应声明一个不是typedef名称的类名或枚举名,其他声明都应引用相同的变量或枚举,或者全部引用函数和函数模板; 在这种情况下,隐藏类名或枚举名(3.3.10).[注意:名称空间名称或类模板名称在其声明性区域中必须是唯一的(7.3.2,第14条). - 结束说明]
在您的情况下,这些条件都不符合,因此您的程序格式不正确.