外部变量和数组声明问题C
extern variable and array declare issue c++
我有一个外部变量和数组声明的问题。如何在不在声明的文件中声明具有全局变量的数组。
file1.cpp
const int size = 10;
mainfile.cpp
extern const int size;
void main()
{
int mas[size];
}
int mas[size];
这条线有一个问题。请任何猜测??
你不能。阵列大小必须是一个恒定的表达式;如果是一个变量,则该变量必须为 const
并在同一翻译单元中初始化,以便其值可用作常数。
如果要在多个翻译单元之间共享值,请在标题中定义它,并包括。
首先,所有常数都具有内部链接。因此这些声明
file1.cpp
const int size = 10;
和
mainfile.cpp
extern const int size;
参考不同的实体。
file1.cpp中声明的常数在其相应的汇编单元之外不可见。
根据C 标准(3.5程序和链接)
3具有名称空间范围(3.3.6)的名称,如果是内部链接
的名称- 明确声明为const或 constexpr 既不明确声明为外部也不以前 宣布具有外部联系;或
在Mainfile中未指定大小的值,因此编译器将向语句
发布错误int mas[size];
因为阵列的大小应为编译时常数表达式。
最简单的解决方案是放置常数定义
const int size = 10;
在每个翻译单元中都包含在一个常数中的常见镶嵌文件中。
int mas [size];
这条线有一个问题。请任何猜测??
正如其他用户所指出的那样,问题可能是您正在尝试创建一个可变的lenght数组,这是C 中不允许的东西(但几乎在C 14中以动态数组*输入。)。
有些编译器接受VLA作为扩展名(没有标准),所以我猜您正在使用没有此扩展名或禁用此扩展名的vla。
不用担心,无论如何您都有工作空调...
#define(不要那样做)
假设问题是VLA,如果我们确保size
作为编译时间值,则解决问题,因此...
// file1.hpp <-- This is now a HEADER not a CPP
#define SIZE 10
// mainfile.cpp
#include "file1.hpp"
void main()
{
int mas[SIZE]; // accepted, equivalent to int mas[10].
}
constexpr
c 11介绍了constexpr
*关键字,可用于实现您的目标
// file1.hpp <-- This is now a HEADER not a CPP
constexpr int size() { return 10; }
// mainfile.cpp
#include "file1.hpp"
void main()
{
int mas[size()];
}
枚举
枚举是编译时常数,因此您可以以这种方式使用它们:
// file1.hpp <-- This is now a HEADER not a CPP
enum constant { size = 10 };
// mainfile.cpp
#include "file1.hpp"
void main()
{
int mas[constant::size];
}
*如果有人找到了更好的链接,请告诉我。
c 不允许在运行时指定数组的大小。当然,在您的示例中,它是在链接时间指定的,但这对编译器没有帮助。但是,如果您使用的是C 14编译器,并且在某些其他编译器(例如GCC)上,您可以执行此操作,但是它比动态分配存储器的便携程度不如动态分配,而不是STD :: vector&lt;>。
参考:https://isocpp.org/wiki/faq/freestore-mgmt#dynamic-array-len
- Visual Studio中的函数声明和函数定义问题
- 如何在标头中声明(或定义)函数的问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 我在范围内未声明的错误类有问题
- 使用静态成员声明类时遇到问题
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 如何解决这个正向类声明问题
- public:静态常量字符串声明/初始化问题
- C++ Windows.h 的问题,在 vs17 中非法声明匿名'struct'
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- 使用 C++17 扩展使用声明时出现问题
- 我在C++程序中声明变量时遇到问题
- 我在 c++ 中声明字符串类型时遇到问题
- 在函数本身而不是在主函数中声明由参数限定的变量有什么问题?
- 单独的类声明和方法定义文件问题
- 类中成员函数声明的问题
- C++ 03 类模板 这是转换构造函数还是转换运算符?以及如何声明解决此问题的方法
- 特征张量的问题:声明矛盾
- C++问题:声明冲突