Bagikan melalui


C28753

peringatan C28753: Mengandalkan urutan evaluasi parameter yang tidak ditentukan

C/C++ memungkinkan pengkompilasi untuk menghasilkan kode untuk mengevaluasi parameter aktual dalam urutan apa pun, dan kompiler x86 dan Arm cenderung memilih pesanan yang berbeda. Kode yang bergantung pada urutan tertentu mungkin ber perilaku berbeda pada platform yang berbeda.

Kesalahan umum adalah dengan penggunaan pointer pintar di mana alamat operator & memiliki efek samping, dalam panggilan seperti ini:

sp->Foo(&sp);

Panggilan ke operator akses anggota -> dan operator& mungkin terjadi dalam kedua urutan. Dengan demikian efek samping dari operator& mungkin terjadi sebelum atau sesudah operator -> dipanggil. Peringatan ini menemukan panggilan buggy ini untuk mencegah perilaku yang berbeda antar platform.

Contoh

Contoh kode berikut menghasilkan peringatan ini.

sp->Foo(&sp)

Contoh kode berikut menghindari peringatan ini.

SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;