const char*
Bir çift parantez içinde her birini sarmak , sorunu aşağıdaki snippet'te gösterildiği gibi çözmelidir:
static const char* const stateNames[5] =
{
("Init state"),
("Run state"),
("Pause state") //comma missing
("Pause state3"),
("Error state")
};
Bir virgül unutursanız, aşağıdakine benzer bir derleme hatası alırsınız: error: called object is not a function or function pointer
CANLI DEMO
Virgül unutursanız, gerçekte olan şey C'nin iki (veya daha fazla) dizeyi bir sonraki virgül veya dizinin sonuna kadar birleştireceğine dikkat edin. Örneğin, virgülün aşağıda gösterildiği gibi unuttuğunu varsayalım:
static const char* const stateNames[] =
{
"Init state",
"Run state",
"Pause state" //comma missing
"Pause state3" //comma missing
"Error state"
};
int main(void)
{
printf("%s\n", stateNames[0]);
return 0;
}
Bu gcc-9.2
üretir (diğer derleyiciler benzer kod üretir):
.LC0:
.string "Init state"
.string "Run state"
.string "Pause statePause state3Error state" ; oooops look what happened
.quad .LC0
.quad .LC1
.quad .LC2
main:
push rbp
mov rbp, rsp
mov eax, OFFSET FLAT:.LC0
mov rdi, rax
call puts
mov eax, 0
pop rbp
ret
Son üç dizenin birleştirildiği ve dizinin beklediğiniz uzunlukta olmadığı açıktır.