/ / Защо операцията за k може да е неопределена? - c, неопределен, операция

Защо операцията за k може да е неопределена? - c, неопределен, операция

Защо компилаторът ми дава предупреждение, че операцията по k може да бъде неопределена? Какво мога да направя, за да премахна това предупреждение?

int main(void){
int k=0;
int a,b;
do{
k = k++;
printf("The value of k is: %dn",k);
}while(some condition that does not involve k);
return EXIT_SUCCESS
}

Отговори:

1 за отговор № 1

Компилаторът дава възможност на ОП да знае последователността k = k++; не е дефиниран от С.

Някои компилатори може да се увеличат k и след това присвоява стойността преди добавянето към k - по този начин да се презапише нарастването. Друг компилатор може да направи увеличението, но все още не запази резултата, присвоява стойността преди прибавянето k, и след това запазете увеличената стойност k.

Всичко на всичко, изпълнявайки код като a = k++ / ++k; или подобни, създава проблеми. Компилаторът може първо да оцени първо лявата или дясната част на разделянето, последователността не е дефинирана и получавате различни отговори.

Вместо това използвайте:

k++;

или

++k;

или

k = k + 1;

1 за отговор № 2

виж тази връзка Недефинирано поведение и точки на последователност

k = k++; // k is modified more than once