merhaba forum,
aşağıdaki SENSIRION_WORDS_TO_BYTES makroyu GCC de compile yapınca hata veriyor
( be16_to_cpu worddeki byte ların yerini değiştiriyor onu kabul ediyor )
bunu nasıl compile ederim ?
teşekkür
...........SCD30.c:540: error: 'for' loop initial declaration used outside C99 mode
/**
* Convert a word-array to a bytes-array, effectively reverting the
* host-endianness to big-endian
* @a: word array to change (must be (u16 *) castable)
* @w: number of word-sized elements in the array (SENSIRION_NUM_WORDS(a)).
*/
#define SENSIRION_WORDS_TO_BYTES(a, w) \
for (u16 *__a = (u16 *)(a), __e = (w), __w = 0; __w < __e; ++__w) { \
__a[__w] = be16_to_cpu(__a[__w]); \
}
Derleyici ayarlarından for içinde değişken tanımlamaya izin vererek
veya
for içindeki değişken ve pointer tanımlamalarını
for dışına alarak deneyebilirsin.
Denemedim ama böyle olacağını tahmin ediyorum.
for içinde değişken tanımlama c11 standardı ile gcc 'ye entegre oldu. c99'da bu işlemi yapamazsınız. Gcc versiyonunuzu yükseltirseniz muhtemelen düzelecektir.
for içinde değişken tanımlama C99 da mevcut.
gcc kullanıyorsanız CFLAGS e "-std=c99" parametresini ekleyerek kullanabilirsiniz.