簡體   English   中英

定義對象宏

[英]defining object macros

gcc 4.4.4 c89

我已經在維護的一些代碼中看到了這一點。

#define FALSE 0
#define TRUE (!FALSE)

編寫以下內容有什么區別:

#define FALSE 0
#define TRUE 1

它已在以下某些功能中使用:

if(condition failed) {
    return FALSE;
}
else {
    return TRUE;
}

非常感謝您的任何建議,

C的“ if”語句將零解釋為false,而將其他所有條件都解釋為true。 因此,使用1表示TRUE值並不重要,盡管1是常規值。

但是無論如何(!0)== 1,所以這不應更改任何內容。

>> cat joe.c
#include <stdlib.h>

#define FALSE 0
#define TRUE (!FALSE)

int main (int argc, char * argv[]) {
  printf("false %d\ntrue %d\n", FALSE, TRUE);
  return 0;
}
>> cc joe.c
>> ./a.out
false 0
true 1
>>

(!FALSE)情況下,一個區別是,如果您更改:

#define FALSE 0

#define FALSE 1

您的程序仍可以“運行”,而無需修改TRUE ...但是,無論如何這不太可能是安全的,因為我確定您的程序依賴於以下結構

if (funtion_that_returns_FALSE()) {
}

如果您更改FALSE的定義,那將會中斷。 不要更改它:)

編輯:我向后讀了這個問題。 抱歉。 由於TRUE為!FALSE和FALSE為0,因此TRUE為1。

編譯器將以任何方式將FALSE評估為0,因為它將看到(!1),這在運行時沒有意義。

真傻。

最好的方法是:

#ifndef FALSE
#define FALSE 0
#elif FALSE != 0
#undef FALSE
#define FALSE REWRITE_PROGRAM("FALSE")
#endif

#ifndef TRUE
#define TRUE 1
#elif TRUE != 1
#undef TRUE
#define TRUE REWRITE_PROGRAM("TRUE")
#endif

其中REWRITE_PROGRAM是一個宏,它調用一個函數(預先提供行號和源文件),該宏將使用高級神經網絡智能地重寫您的代碼,從而避免TRUE或FALSE的定義沖突,其中TRUE定義為其他任何值大於1且FALSE不能為0以外的任何其他值。生成並生成正確的代碼后,它將執行應用程序的新版本並退出。

作為備份,如果重寫AI遇到假設不正確的情況,則還可以通過使用REWRITE_PROGRAM添加更多代碼來確保其新假設正確。

最終,程序將反復重寫自身直到正確為止,這樣您就不必擔心TRUE和FALSE的定義方式,沖突以及將來這些定義是否會更改。

暫無
暫無

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

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