gpt4 book ai didi

c - 系统string2.h头文件优化时产生编译错误

转载 作者:行者123 更新时间:2023-11-30 17:48:01 25 4
gpt4 key购买 nike

我正在嵌入式平台上运行 Linaro Ubuntu 12.03。使用该系统几个月来构建一个简单的程序后,我在添加优化选项时开始收到编译错误。因此,我创建了一个测试程序:

// test.c
#include <string.h>

int main(int argc, char *argv[])
{
return 0;
}

编译:

gcc test.c

工作得很好。但是,当我添加优化选项时:

gcc -O1 test.c

我收到错误:

In file included from /usr/include/string.h:637:0,
from test.c:1:
/usr/include/arm-linux-gnueabi/bits/string2.h:1305:3: error: "(" may not appear in macro parameter list

-O1-Ofast 的所有级别都会发生这种情况。

在另一个带有 Linaro Ubuntu 12.04 的嵌入式系统上尝试同样的操作,效果很好。我的 Ubuntu PC 上也是如此。

string2.h中的代码部分:

#  define __strdup(sp \
(__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \
? (((__const char *) (s))[0] == '\0' \
? (char *) calloc ((size_t) 1, (size_t) 1) \
: ({ size_t __len = strlen (s) + 1; \
char *__retval = (char *) malloc (__len); \
if (__retval != NULL) \
__retval = (char *) memcpy (__retval, s, __len); \
__retval; })) \
: __strdup (s)))

(问题出在宏的第二行)

为什么我的构建环境无缘无故地停止工作?

<小时/>

更新1:

我刚刚检查了另一 block 运行 12.03 的主板以及 12.04 系统上的同一文件。看起来第一 block 板上的 string2.h 文件中确实存在语法错误。另外两个文件显示:

#  define __strdup(s) \

而不是:

#  define __strdup(sp \

因此 ) 被替换为 p。我现在能想到的唯一解释是我正在使用的 SD 卡开始损坏文件。但是,任何其他解释都值得赞赏。

最佳答案

由于过去可以工作,而SD卡上的string2.h发生了变化,因此至少SD卡中可能存在坏扇区。

关于c - 系统string2.h头文件优化时产生编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729085/

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