gpt4 book ai didi

32bit-64bit - 我在 32 位架构中的 gcc 编译中有以下警告,但在 64 位架构中没有任何此类警告

转载 作者:行者123 更新时间:2023-12-04 03:01:29 25 4
gpt4 key购买 nike

symbol.c:在函数“symbol_FPrint”中:

symbol.c:1209: warning: format '%ld' expects type 'long int', but argument 3 has type 'SYMBOL'
symbol.c: In function 'symbol_FPrintOtter':
symbol.c:1236: warning: format '%ld' expects type 'long int', but argument 3 has type 'SYMBOL'
symbol.c:1239: warning: format '%ld' expects type 'long int', but argument 3 has type 'SYMBOL'
symbol.c:1243: warning: format '%ld' expects type 'long int', but argument 3 has type 'SYMBOL'
symbol.c:1266: warning: format '%ld' expects type 'long int', but argument 3 has type 'SYMBOL'

在符号.c中

1198 #ifdef CHECK
1199 else {
1200 misc_StartErrorReport();
1201 misc_ErrorReport("\n In symbol_FPrint: Cannot print symbol.\n");
1202 misc_FinishErrorReport();
1203 }
1204 #endif
1205 }
1206 else if (symbol_SignatureExists())
1207 fputs(symbol_Name(Symbol), File);
1208 else
1209 fprintf(File, "%ld", Symbol);
1210 }

SYMBOL 定义为:

typedef size_t SYMBOL

当我将 '%ld' 替换为 '%zu' 时,我收到以下警告:

symbol.c: In function 'symbol_FPrint':
symbol.c:1209: warning: ISO C90 does not support the 'z' printf length modifier

注意:从这里开始,它已于 2010 年 3 月 26 日进行了编辑,并且由于与上述问题相似,因此添加了以下问题。

我有以下声明:

printf("\n\t %4d:%4d:%4d:%4d:%4d:%s:%d", Index, S->info, S->weight,
Precedence[Index],S->props,S->name, S->length);

在 64 位架构中编译时收到的警告是:

format ‘%4d’ expects type ‘int’, but argument 5 has type ‘size_t’

以下是参数的定义:

  NAT    props;
typedef unsigned int NAT;

我怎样才能摆脱这个问题,以便我可以在 32 位和 64 位架构中进行编译而不发出警告?

它的解决方案是什么?

最佳答案

使用 %zu 而不是 %ld 作为 size_t 的格式,然后您将获得正确的行为(并且不会出现警告) 32 位和 64 位版本。

如果由于某种原因您无法使用%zu(例如旧的或非标准编译器),那么您可以执行以下操作:

#ifdef __LP64__ // if 64 bit environment
#define FMT_SIZE_T "llu"
#else
#define FMT_SIZE_T "lu"
#endif

然后,当您需要将 printf 与 size_t 类型的内容一起使用时,您可以这样做:

printf("(sizeof(void *) = %"FMT_SIZE_T" bytes \n", sizeof(void *));

关于32bit-64bit - 我在 32 位架构中的 gcc 编译中有以下警告,但在 64 位架构中没有任何此类警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426113/

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