web-dev-qa-db-fra.com

Initialisation du tableau avec {0}, {0,}?

Dites que je veux initialiser myArray 

char myArray[MAX] = {0};  
char myArray[MAX] = {0,};  
char myArray[MAX]; memset(myArray, 0, MAX);  

Sont-ils tous égaux ou privilégiés par rapport à un autre? 

Je vous remercie

30
eugene

Elles sont équivalentes en ce qui concerne le code généré (du moins dans les versions optimisées) car lorsqu'un tableau est initialisé avec la syntaxe {0}, toutes les valeurs non spécifiées explicitement sont initialisées implicitement avec 0 et le compilateur en sait suffisamment pour insérer un appel à memset.

La seule différence est donc stylistique. Le choix dépendra de la norme de codage que vous utilisez ou de vos préférences personnelles.

20
Sylvain Defresne

En fait, je recommande personnellement:

char myArray[MAX] = {};

Ils font tous la même chose, mais j'aime mieux celui-ci; c'est le plus succinct. = D

Au fait, notez que char myArray[MAX] = {1}; fait pas initialise toutes les valeurs à 1! Il initialise uniquement la première valeur à 1 et le reste à zéro. Pour cette raison, je vous recommande de ne pas écrire char myArray[MAX] = {0}; car c'est un peu trompeur pour certaines personnes, même si cela fonctionne correctement.

31
Mehrdad

Je pense que la première solution est la meilleure.

char myArray[MAX] = {0};  //best of all
4
Nawaz

Soit peut être utilisé 

Mais je pense que le texte ci-dessous est plus compréhensible et lisible. 

  char myArray[MAX]; 
  memset(myArray, 0, MAX);
1
Jhaliya

En supposant que vous vouliez toujours initialiser avec 0.

-> Votre premier et deuxième chemin sont les mêmes. Je préfère 1er.

-> La troisième manière de memset() doit être utilisée lorsque vous souhaitez affecter des 0 autres que l’initialisation.

-> Si ce tableau ne doit être initialisé qu'une seule fois, vous pouvez alors placer le mot clé static devant lui afin que le compilateur fasse le travail à votre place (pas de temps système).

1
iammilind

Vous pouvez également utiliser bzero fn (écrire des octets de valeur zéro)

#include <strings.h>
void bzero(void *s, size_t n)

http://linux.die.net/man/3/bzero

0
Bogdan Ruzhitskiy