Par curiosité, que se passe-t-il si je définis un tableau de longueur nulle int array[0];
dans le code ? GCC ne se plaint pas du tout.
Exemple de programme
#include <stdio.h>
int main() {
int arr[0];
return 0;
}
Clarification
J'essaie en fait de comprendre si les tableaux de longueur nulle initialisés de cette manière, au lieu d'être pointés comme les tableaux de longueur variable dans les commentaires de Darhazer, sont optimisés ou non.
C'est parce que je dois publier du code dans la nature, et j'essaie donc de savoir si je dois gérer les cas où l'option SIZE
est défini comme suit 0
, ce qui se produit dans certains codes avec un int array[SIZE];
J'ai été surpris de constater que le GCC ne se plaignait pas, ce qui m'a amené à poser ma question. D'après les réponses que j'ai reçues, je pense que l'absence d'avertissement est largement due à la prise en charge d'un ancien code qui n'a pas été mis à jour avec la nouvelle syntaxe [].
Parce que je m'interrogeais principalement sur l'erreur, je marque la réponse de Lundin comme correcte (celle de Nawaz était la première, mais elle n'était pas aussi complète) - les autres soulignaient son utilisation réelle pour les structures à queue, bien que pertinente, n'est pas exactement ce que je recherchais.
0 votes
On dirait que GCC ne se plaint pas du tout, et que vous devez l'initialiser. Qu'avez-vous besoin de savoir de plus, exactement, et pouvez-vous le découvrir en le faisant vous-même ?
0 votes
Ce sujet pourrait vous intéresser : stackoverflow.com/questions/295027/array-of-zero-length
52 votes
@AlexanderCorwin : Malheureusement, en C++, avec des comportements non définis, des extensions non standard et d'autres anomalies, essayer quelque chose soi-même n'est souvent pas une voie vers la connaissance.
1 votes
stackoverflow.com/a/4288868/797303 - ceci aussi
1 votes
Il n'y a aucune utilisation productive possible de la création d'un tableau de 0. De plus, si vous ouvrez un projet et faites un copier-coller, vous pouvez appuyer sur le bouton de compilation et voir par vous-même sans poser cette question.
6 votes
@JustinKirk Je viens de me faire piéger par cela aussi en testant et en voyant que cela fonctionnait. Et grâce aux critiques que j'ai reçues dans mon post, j'ai appris que tester et voir que ça marche ne signifie pas que c'est valide et légal. Un auto-test n'est donc pas toujours valable.
2 votes
@JustinKirk, voir Réponse de Matthieu pour un exemple d'utilisation. Elle peut également s'avérer utile dans un modèle où la taille du tableau est un paramètre du modèle. L'exemple de la question est manifestement hors contexte.
0 votes
Chaque fois qu'une question de ce type est posée, je ne sais pas pourquoi.
-pedantic
n'est pas la valeur par défaut de g++. Tant d'extensions non portables...2 votes
@JustinKirk : Quel est le but de la
[]
en Python ou même""
en C ? Parfois, une fonction ou une macro nécessite un tableau, mais vous n'avez pas de données à y placer.0 votes
@dan04 : Mauvais exemple. "" est une constante de chaîne tout à fait valide d'une longueur d'un octet (
\0
). En C, il n'y a pas de situation où l'on veut un "tableau de taille zéro" pour lequel on ne pourrait pas passer NULL sans les mêmes mises en garde. La réponse de Lundin invoquant la norme et la réponse de Matthieu expliquant pourquoi elle est parfois utilisée de toute façon couvrent le problème dans son intégralité.15 votes
Qu'est-ce que "C/C++" ? Il s'agit de deux langues distinctes
1 votes
Duplication possible de Tableau de taille 0
0 votes
La RAISON pour laquelle il s'agit d'un avertissement plutôt que d'une erreur dans de nombreux compilateurs est qu'il s'agit de l'ancienne façon de déclarer un tableau de taille variable à la fin d'une structure. Ce tableau devait toujours être alloué sur le tas.