本文介绍了指向未指定的尺寸和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法律的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!