Avertissement du compilateur (niveau 4) C4816
'paramètre' : le paramètre a un tableau de taille zéro qui sera tronqué (sauf si l’objet est passé par référence)
Un paramètre d’objet avec un tableau de taille zéro n’a pas été passé par référence. Le tableau ne sera pas copié lorsque l’objet sera passé.
Exemple
L’exemple suivant génère l’erreur C4816 :
// C4816.cpp
// compile with: /W4
#include <stdio.h>
extern "C" int printf_s(const char *, ...);
#pragma warning(disable : 4200)
struct S1
{
int i;
char cArr[];
};
void TestErr(S1 s1) // C4816 param with zero-array
// not passed by reference
{
printf_s("%d %c %c\n", s1.i, s1.cArr[0], s1.cArr[1]);
}
void TestOk(S1 &s1)
{
printf_s("%d %c %c\n", s1.i, s1.cArr[0], s1.cArr[1]);
}
int main()
{
S1 myS_1 = { 6, 'a', 'b', 'c' };
TestErr(myS_1);
TestOk(myS_1);
}