本文介绍了指向未指定的尺寸和QUOT的阵列;(* P)[]"用C ++违法但在C法律的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚发现这是(在C,但合法的)在C ++中非法的:

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
的#define ARRAY_LENGTH(A)(的sizeof(A)/的sizeof(A [0]))INT累加(INT N,const int的(*数组)[])
{
    INT I;
    INT总和= 0;
    对于(i = 0; I< N ++我){
        总和+ =(*数组)[我]
    }
    返回总和;
}INT主要(无效)
{
    诠释一个[] = {3,4,2,4,6,1,-40,23,35};
    的printf(%d个\\ N,积累(ARRAY_LENGTH(一),放大器;一));
    返回0;
}

它编译没有使用问题的gcc -std = C89 -pedantic ,但无法使用 G ++ 进行编译。当我尝试使用来编译g ++的我收到以下错误消息:

的main.cpp:5:37:错误:参数'阵'包括指向未知的数组边界INT []
 INT累加(INT N,INT(*数组)[])
                                     ^
main.cpp中:在函数'廉政的main():
main.cpp中:18:50:错误:无法转换'INT(*)[9]'到'INT(*)[]'的说法'2'到'廉政累加(INT,INT(*)[])'
     的printf(%d个\\ N,积累(ARRAY_LENGTH(一),放大器;一));

我在我的C code一直在使用这个很长一段时间,我不知道,在C是非法++。对我来说,这似乎是记录一个函数具有一个数组,其大小手之前是不知道的好方法。

我想知道这是为什么合法的C,但是无效的C ++。我也想知道这是什么,使得C ++的委员会决定把它拿走(和分断用C这种兼容性)。

那么,为什么是这样的法律C code,但非法C ++ code?


解决方案

,含铅量高达C ++标准化过程中:

这篇关于指向未指定的尺寸和QUOT的阵列;(* P)[]"用C ++违法但在C法律的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 01:53