(1) {} (1) vaqtida bir xil bo'lsa;

Men faqat shu kodning amin bo'lishiga ishonch hosil qilishni istayman:

while(flag==true)
{
} 
foo();

bu bilan bir xil:

while(flag==true);

foo();
3
Va faqat ikkinchi kodni ishlatmang, agar siz kodni "salqin" ko'rinishini istamasangiz, unda kamroq odam tushunishi va kelajakda xatolar paydo bo'lishi kerak.
qo'shib qo'ydi muallif Eric Wang, manba
@StoryTeller Bu yaxshi savol, deb o'ylayman, ehtimol siz juda ko'p his qilasiz ...
qo'shib qo'ydi muallif Eric Wang, manba
Ba'zilar bo'sh kod uchun (;;) {} funksiyasini taklif qiladi, chunki bu ifoda uchun zaruriylikni yo'q qiladi.
qo'shib qo'ydi muallif unwind, manba
Ha, xuddi shunday.
qo'shib qo'ydi muallif Jean-François Fabre, manba
@StoryTeller: Ehtimol, undagi nom va mazmun mos emas va juda ko'p turli natijalar berishi mumkin. Malumot bayroq da uchuvchi sifatida ham turli xulq-xulosa chiqarishi mumkin. Juda qiziqroq (va tegishli) savol shu.
qo'shib qo'ydi muallif Olaf, manba
Uni sinab ko'rdingizmi? Hech bo'lmasa boshqacha bo'lishi mumkinligiga ishonish uchun har qanday sababi bormi?
qo'shib qo'ydi muallif abelenky, manba
Bilasizmi ... Savol aniq va yaxshi shakllangan, lekin men nima uchun biron-bir sababga ko'ra mavzudan tashqarida bo'lishi kerak bo'lgan tuyg'uni silkita olmayman ...
qo'shib qo'ydi muallif StoryTeller, manba
Ha, siz birinchi misolning braxiyalari orasidagi shartlarni joylashtirishingiz mumkin, shunda siz bayroqning holatini noto'g'ri holatga o'tkazish uchun shartni qo'shishingiz mumkin, shuning uchun vaqtli davrdan chiqishingiz mumkin.
qo'shib qo'ydi muallif Shaun Bebbers, manba

6 javoblar

; alone is a null statement in C.

Sizning holatingizda {} yoki ; so'zma-so'z zarur, lekin ular xuddi shunday qilishadi: hech narsa

Related: Use of null statement in C

9
qo'shib qo'ydi

Boshqa javoblardan tashqari: Xuddi shu narsa.

Lekin men buni afzal ko'raman:

while (condition)
{
} 
foo();

Buning ustiga:

while (condition);
foo();

chunki vaqtdan keyin nuqta-vergulni unutib qo'ysangiz, kodingiz yaxshi tuziladi, lekin kutilgan narsalarni qilmaydi:

while(condition) //; forgotten here
foo();           

aslida quyidagilarga teng bo'ladi:

while(condition)
{
  foo();
}
3
qo'shib qo'ydi
@Olaf So'ngra yarim chiziqning o'rniga braziliyani qo'llash juda yaxshi amaldir. Shu bilan bir qatorda while (shart) ; ham juda yaxshi. Yomon ovoz berish, bu eng yaxshi javob. Javob shuningdek, MISRA-C tomonidan quvvatlanadi: 2012 15.6. Shuning uchun bu faqatgina bir kishining öznel fikrlari emas. MISRA-C, asosan, ilmiy tadqiqotlar asosida, asosan, Safer C kitobida chop etilgan Les Hatton tomonidan. Nuqta-nuqsonli muammoni ushbu kitobda berilgan. 2.7 Empirik ravishda aniqlangan noto'g'ri xatti-harakatlar. Bu C kodining populyatsion tadkikotlari bilan isbotlangan ma'lum bir xato manbai.
qo'shib qo'ydi muallif Lundin, manba
FYI: So'nggi gcc bu haqda ogohlantirmoqda. Men Yoda-shartlari bilan bir xil deb o'ylayman: ulardan foydalanishlari bilanoq, endi ular kodni aniqroq qilishadi. Siz savolga javob bermaysiz, faqat shaxsiy fikringizni bildirasiz.
qo'shib qo'ydi muallif Olaf, manba

Yes, because when put semicolon after while loop statement that indicate empty body and when the condition becomes false then it goes to the immediate next statement after that loop. 

2
qo'shib qo'ydi

Ha. Bir blok bilan ta'qib qilinishi mumkin bo'lgan nazorat tuzilmasi (masalan, while , for va hokazo.) ; bo'sh blokdan iborat.

2
qo'shib qo'ydi

Yes, they are same.

Kodning assotsiatsiyasini yaratishingiz mumkin va o'zingiz uchun xuddi shu assotsiatsiyani ishlab chiqarishni ko'rasiz. ( gcc filename.c -S -masm = intel -o ouputfilename dan foydalanish)

#include

int foo(void);
int main(){

  int flag;
  scanf("%d" , &flag);
  while(flag==1);
  foo(); 
}


int foo(void){
  int x = 2;
  return x*x;
}

.LC0:
    .ascii "%d\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    push    rbp
    .seh_pushreg    rbp
    mov rbp, rsp
    .seh_setframe   rbp, 0
    sub rsp, 48
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    lea rax, -4[rbp]
    mov rdx, rax
    lea rcx, .LC0[rip]
    call    scanf
    nop
.L2:
    mov eax, DWORD PTR -4[rbp]
    cmp eax, 1
    je  .L2
    call    foo
    mov eax, 0
    add rsp, 48
    pop rbp
    ret
    .seh_endproc
    .globl  foo
    .def    foo;    .scl    2;  .type   32; .endef
    .seh_proc   foo
foo:
    push    rbp
    .seh_pushreg    rbp
    mov rbp, rsp
    .seh_setframe   rbp, 0
    sub rsp, 16
    .seh_stackalloc 16
    .seh_endprologue
    mov DWORD PTR -4[rbp], 2
    mov eax, DWORD PTR -4[rbp]
    imul    eax, DWORD PTR -4[rbp]
    add rsp, 16
    pop rbp
    ret
    .seh_endproc
    .ident  "GCC: (x86_64-posix-seh-rev1, Built by MinGW-W64 project) 6.3.0"
    .def    scanf;  .scl    2;  .type   32; .endef

(Flag == 1) {} (kod => 1); while while (kod => 1);


.LC0:
    .ascii "%d\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    push    rbp
    .seh_pushreg    rbp
    mov rbp, rsp
    .seh_setframe   rbp, 0
    sub rsp, 48
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    lea rax, -4[rbp]
    mov rdx, rax
    lea rcx, .LC0[rip]
    call    scanf
    nop
.L2:
    mov eax, DWORD PTR -4[rbp]
    cmp eax, 1
    je  .L2
    call    foo
    mov eax, 0
    add rsp, 48
    pop rbp
    ret
    .seh_endproc
    .globl  foo
    .def    foo;    .scl    2;  .type   32; .endef
    .seh_proc   foo
foo:
    push    rbp
    .seh_pushreg    rbp
    mov rbp, rsp
    .seh_setframe   rbp, 0
    sub rsp, 16
    .seh_stackalloc 16
    .seh_endprologue
    mov DWORD PTR -4[rbp], 2
    mov eax, DWORD PTR -4[rbp]
    imul    eax, DWORD PTR -4[rbp]
    add rsp, 16
    pop rbp
    ret
    .seh_endproc
    .ident  "GCC: (x86_64-posix-seh-rev1, Built by MinGW-W64 project) 6.3.0"
    .def    scanf;  .scl    2;  .type   32; .endef

Ikkala holatda ham tegishli qismning bir xilligini ko'rishingiz mumkin.

 //Below Portion is same in both cases. 
.L2:        
    mov eax, DWORD PTR -4[rbp]
    cmp eax, 1
    je  .L2
    call    foo
    mov eax, 0
    add rsp, 48
    pop rbp
    ret
    .seh_endproc
    .globl  foo
    .def    foo;    .scl    2;  .type   32; .endef
    .seh_proc   foo
2
qo'shib qo'ydi
har ikkala kodni sindirib tashlash yaxshi fikr edi, chunki u amalga oshirilishi mumkin bo'lgan dasturni tasdiqlash uchun rasmiy ravishda hech narsa tasdiqlamaydi.
qo'shib qo'ydi muallif Jean-François Fabre, manba
bir muammo emas, balki qisman qisman javob beradi (men yuqoriga ko'tarilgan)
qo'shib qo'ydi muallif Jean-François Fabre, manba
@ Jan-FrançoisFabre Sir, O'shanda qanday qilib OPni tushuntirishim kerak?
qo'shib qo'ydi muallif Suraj Jain, manba
@ Jan-FransuaFabre Taqdirli janob.
qo'shib qo'ydi muallif Suraj Jain, manba

Yes, having an empty body of the loop is equivaled to just while();

2
qo'shib qo'ydi