C 定义对象宏

C 定义对象宏,c,C,通用条款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。所以用什

通用条款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是常规值

但是(!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
>>
>cat joe.c
#包括
#定义FALSE 0
#定义真(!假)
int main(int argc,char*argv[]){
printf(“假%d\n假%d\n”,假,真);
返回0;
}
>>抄送乔
>>/a.out
假0
真1
>>
C“if”语句将零解释为false,其他任何语句都绝对解释为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
>>
>cat joe.c
#包括
#定义FALSE 0
#定义真(!假)
int main(int argc,char*argv[]){
printf(“假%d\n假%d\n”,假,真);
返回0;
}
>>抄送乔
>>/a.out
假0
真1
>>

一个区别是,在
(!FALSE)
情况下,如果您更改:

#define FALSE 0

您的程序仍然“工作”,而不修改TRUE。。。然而,无论如何,这不太可能是安全的,因为我确信您的程序依赖于诸如

if (funtion_that_returns_FALSE()) {
}

如果您更改了
FALSE
的定义,则会中断。不要更改:)

一个区别是,在
(!FALSE)
情况下,如果您更改:

#define FALSE 0

您的程序仍然“工作”,而不修改TRUE。。。然而,无论如何,这不太可能是安全的,因为我确信您的程序依赖于诸如

if (funtion_that_returns_FALSE()) {
}

如果您更改了
FALSE
的定义,则会中断。不要更改:)

编辑:我将问题向后看。很抱歉既然是真的!FALSE和FALSE为0,则TRUE为1

无论如何,编译器将对0求值为FALSE,因为它将看到(!1),在运行时进行计算没有意义


这太傻了。

编辑:我把问题倒过来看。很抱歉既然是真的!FALSE和FALSE为0,则TRUE为1

无论如何,编译器将对0求值为FALSE,因为它将看到(!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_程序是一个宏,它调用一个函数(提前提供行号和源文件),该函数将使用高级神经网络智能地重写代码,以避免对TRUE或FALSE的定义冲突,其中TRUE定义为除1以外的任何值,FALSE定义为除0以外的任何值。在生成正确的代码并构建之后,它将执行新构建的应用程序版本并退出

作为备份,如果重写AI遇到其假设不正确的情况,它还将通过使用
rewrite\u程序
添加更多代码来确保其新假设是正确的


最终,程序将反复重写自身,直到正确为止,这样您就不必担心正确与否的定义、冲突以及这些定义将来是否会更改。

实现这一点的最佳方法是:

#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_程序是一个宏,它调用一个函数(提前提供行号和源文件),该函数将使用高级神经网络智能地重写代码,以避免对TRUE或FALSE的定义冲突,其中TRUE定义为除1以外的任何值,FALSE定义为除0以外的任何值。在生成正确的代码并构建之后,它将执行新构建的应用程序版本并退出

作为备份,如果重写AI遇到其假设不正确的情况,它还将通过使用
rewrite\u程序
添加更多代码来确保其新假设是正确的


最终,程序会反复重写自己,直到正确为止,这样你就不必担心真与假的定义、冲突以及这些定义将来是否会改变。

在c中,任何不为零的东西都是真的。这正是代码所表示的。我不认为这是愚蠢的,事实上,它甚至可能比任意选择一个真值更明智。@Stephen:1不是任意值。C中的布尔运算返回0表示false或1表示true。因此,用1定义TRUE是完全有意义的。使用!当然,0(即1)对事实的描述更为明确,但是如果您需要在这里明确地提醒您这些基本事实,那么您作为一名C程序员的生活是危险的@安全:我当然同意,依靠这些细节走的是一条危险的路线:)也许武断对我来说是一个糟糕的措辞选择。我的观点是,
if(c)
只对
else
分支求值,如果
c
求值为零。所以,
TRUE
用非零的东西表示才是重要的。很适合开发
bool
type:)在c语言中,任何不是零的东西都是真的。这正是代码所表示的。我不认为这是愚蠢的,事实上,它甚至可能比任意选择一个真值更明智。@Stephen:1不是任意值。C中的布尔运算返回0表示false或1表示true。因此,用1定义TRUE是完全有意义的。使用!当然,0(即1)对事实的描述更为明确,但是如果您需要在这里明确地提醒您这些基本事实,那么您作为一名C程序员的生活是危险的@安全:我当然同意,依靠这些细节走的是一条危险的路线:)也许武断对我来说是一个糟糕的措辞选择。我的观点是,
if(c)
只计算
else
分支if
c
evalua