gpt4 book ai didi

c - 指针的按位算术是否定义了行为?

转载 作者:行者123 更新时间:2023-12-02 05:52:19 26 4
gpt4 key购买 nike

我正在学习指针。鉴于此代码:

FILE* from = fopen("in.txt", "r");
FILE* to = fopen("out.txt", "w");
if (from == NULL || to == NULL)
{
printf("failed to open files!\n");
return;
}

是否将 if 条件更改为此有效(已定义)行为?

FILE* from = fopen("in.txt", "r");
FILE* to = fopen("out.txt", "w");
if ((from | to) == NULL)
{
printf("failed to open files!\n");
return;
}

最佳答案

没有。

首先,它不应该编译,至少如果编译器符合标准则不能。指针不是 |& 等按位运算符的有效操作数。

其次,即使您的编译器允许您将指针视为整数,您也会面临平台不兼容的风险;有些 C 实现根本不能互换。您可能会假设任何此类实现也必然是一致的,但假设很少是安全的......

第三,即使假设 ORing 两个指针一起工作,并得到一些可以与 NULL 比较的东西,您也改变了测试的意义:(from|to) 仅当 both fopen 失败时才为 NULL;如果只有其中一个成功,结果将为非零,您的代码将失败。

关于c - 指针的按位算术是否定义了行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com