接受 C/C++ 的函数数组类型

发布于 2024-08-04 12:51:06 字数 369 浏览 6 评论 0原文

当将数组作为参数传递时,g++ 似乎忽略了数组大小的差异。即,即使使用 -Wall,以下编译也不会出现警告。

void getarray(int a[500])
{
    a[0] = 1;
}

int main()
{
    int aaa[100];
    getarray(aaa);
}

现在,我了解了传递指针的底层模型,显然我可以将函数定义为 getarray(int *a) 。然而,我预计当我显式指定数组大小时,gcc 至少会发出警告。

有什么办法可以绕过这个限制吗? (我客座 boost::array 是一种解决方案,但我有很多使用 c 样式数组的旧代码,这些代码已升级为 C++...)

It seems like g++ ignores difference in array sizes when passing arrays as arguments. I.e., the following compiles with no warnings even with -Wall.

void getarray(int a[500])
{
    a[0] = 1;
}

int main()
{
    int aaa[100];
    getarray(aaa);
}

Now, I understand the underlying model of passing a pointer and obviously I could just define the function as getarray(int *a). I expected, however, that gcc will at least issue a warning when I specified the array sizes explicitly.

Is there any way around this limitation? (I guest boost::array is one solution but I have so much old code using c-style array which got promoted to C++...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若能看破又如何 2024-08-11 12:51:06

数组作为指向其第一个参数的指针传递。如果大小很重要,则必须将函数声明为 void getarray(int (&a)[500]);

C 习惯用法是传递数组的大小,如下所示: void getarray( int a[], int 大小);
C++ 习惯用法是使用 std::vector (或者最近使用 std::tr1::array )。

Arrays are passed as a pointer to their first argument. If the size is important, you must declare the function as void getarray(int (&a)[500]);

The C idiom is to pass the size of the array like this: void getarray(int a[], int size);
The C++ idiom is to use std::vector (or std::tr1::array more recently).

老旧海报 2024-08-11 12:51:06

我同意rpg 所说的。但是,如果您想使用任意大小的数组调用该函数,您可以使用模板来执行此操作:

template< std::size_t N>
void getarray(int (&a)[N])

I second what rpg said. However, in case you want to call the function with arrays of any size, you could use a template to do that:

template< std::size_t N>
void getarray(int (&a)[N])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文