Pourquoi ne puis-je pas passer des tableaux constants comme arguments?

En C, pourquoi ne puis-je pas faire ceci:

arrayfn({1.0, 2.0, 3.0}); 

Si arrayfn est une fonction qui prend un paramètre de type double[] ou double* , selon ce qui est. Essayer cela me donne une erreur de syntaxe.

Existe-t-il un moyen de réaliser quelque chose en C tel que celui-ci – générer et passer immédiatement un tableau connu au moment de la compilation – en évitant de passer une ligne de code à pré-déclarer et à le remplir?

Réponse courte: Vous devez utiliser un littéral composé . Quelque chose comme

  arrayfn( (double[]) {1.0, 2.0, 3.0} ); 

devrait faire le travail.


Quelques explications

Dans la partie, pourquoi arrayfn({1.0, 2.0, 3.0}); n’a pas fonctionné, car, sans la syntaxe pour les littéraux composés, {1.0, 2.0, 3.0} est une liste d’initialisation fermée par accolade. Il ne s’agit pas d’un “object” pouvant être utilisé comme argument de fonction. Ce ne sont pas des “tableaux constants” , comme vous avez pu le penser.

Pour append plus d’informations, citons C11 , chapitre §6.5.2.5, Littéraux composés.

Une expression postfixe composée d’un nom de type entre parenthèses suivi d’une liste d’initialisateurs entourée d’accolades est un littéral composé. Il fournit un object non nommé dont la valeur est donnée par la liste d’initialisation.