簡體   English   中英

具有C宏的“可重置”環路DSL?

[英]“resettable” loop DSL with C macros?

我希望循環只運行一次,除非將其設置為重復,但我不喜歡必須將變量作為常規程序流程的一部分來顯式設置變量。

我正在使用它,但是項目維護者不喜歡它:

int ok = 0;
while (ok^=1) {
    // ...
    if (something_failed) ok = 0;
}

(與while (!ok) { ok = 1; // ...

不錯的是,您可以將它們包裝在宏中:

#define RETRY(x) while (x^=1)
#define FAIL(x) x = 0

並將它們用作

int ok = 0;
RETRY(ok) {
    // ...
    if (something_failed) FAIL(ok);
}

沒有怪異的xor-assign,如何使這些宏起作用?

反復使用XOR 1可以在0和1之間反復切換,這非常好,特別是在與硬件相關的代碼中。 這是您要做什么? 但這不是您的使用方式,因此沒有任何意義。 另外,將其與帶符號的int一起使用是有問題的。

請不要發明一些丑陋的宏語言,這是糟糕的十倍! 這是您最糟糕的事情。

沒有理由不能簡單地按照以下步驟做一些事情:

bool retry = true;
while(retry)
{
  retry = false;
  ...
  if(something_failed) retry = true;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM