The example hinzufügen genommen wird:A verwirrendes Beispiel über das C Stichwort "restrict"
void updatePtrs(size_t *restrict ptrA, size_t *restrict ptrB, size_t *restrict val)
{
*ptrA += *val;
*ptrB += *val;
}
I diese Funktion in den main()
nennen:
int main(void)
{
size_t i = 10;
size_t j = 0;
updatePtrs(&i, &j, &i);
printf("i = %lu\n", i);
printf("j = %lu\n", j);
return 0;
}
Der val
Zeiger nicht zweimal geladen wird gemäß nach der Wikipedia-Beschreibung, so sollte der Wert von j
10 sein, aber es ist 20 tatsächlich.
Ist mein Verständnis über dieses Schlüsselwort nicht korrekt? Sollte ich einige spezifische Optionen von gcc
verwenden?
Vielen Dank im Voraus.
Ich möchte nur dieses Schlüsselwort verstehen, also brich ich das Versprechen. es wird 10, wenn "-O1" für gcc (5.2.1) verwendet wird. – Choes