2016-11-24 2 views
0

Ich brauche ein fixes Größe Arrays ziemlich oft zu initialisieren, etwa so:Intelligentere Art der Array-Initialisierung?

for(uint16_t q=0; q<SIZE; q++) 
    array[q]=value; 

Array als float array[SIZE]; definiert ist

Gibt es eine schönere Art und Weise, dies zu tun, mit einem Makro oder ähnlichem zu ersetzen?

p.s. Nicht erlaubt mem___ Anrufe zu verwenden.

+3

Was gibt es schöneres, als dies ohne 'memset' oder' memcpy'? Welcher Typ ist 'Array'? – i486

+4

Ist dieser Wert zum Zeitpunkt der Kompilierung bekannt, oder erhalten Sie ihn zur Laufzeit? – Swanand

+5

Bitte definieren Sie "netter". –

Antwort

0

Mit Präprozessor können Sie wie folgt tun:

#define nmembers(x) (sizeof(x)/sizeof(*(x))) 
#define arrset(arr, val) \ 
    do { \ 
     size_t i; \ 
     for (i = 0; i < nmembers(arr); ++i) \ 
      (arr)[i] = val; \ 
    } while (0) 

float array[SIZE], val = 0.67f; 
arrset(array, val); 
+0

Warum würden Sie so ein hässliches Makro für so eine einfache Sache schreiben? Schreib einfach eine Schleife für das Ende der Geschichte. Es besteht keine Notwendigkeit, den Code in Vergessenheit zu verschleiern. – Lundin

+0

Stellen Sie sich Dutzende dieser Schleifen vor. Das sieht schöner aus: 'INITIALIZE (myarr, SIZE, 0.0f);' denkst du nicht. – Danijel

+0

@Danijel Nein, es sieht wirklich schlecht aus. C-Programmierer verstehen C-Code, sie verstehen nicht "meine private, geheime Makrosprache". Es gibt keinen Weg in C, mit dem Sie das eleganter schreiben können als 'für (size_t i = 0; i Lundin

0

C hat keine integrierte Möglichkeit, das gesamte Array auf einen Wert ungleich Null zu initialisieren. Wenn Sie GCC verwenden, hat es Designated Initializers Erweiterung. Sie können es gerne verwenden:

float widths[] = { [0 ... 99] = 3.14 }; 

Dieser Satz alle Elemente zu 3.14.

Verwandte Themen