如何将文字初始化为C中的大小?

如何将文字初始化为C中的大小?,c,C,我的问题和你一样,只是我在写C 如何初始化一个文本数字,使其类型为size\u t 基本上,我有一个相当于以下内容的宏: #define myprint(S) { printf("hello %zu", S); } 我想这样使用它: myprint(0); 但我得到的信息是: 格式“%zu”要求参数类型为“size\u t”,但参数类型为“int” 我尝试过编写0lu,但它并不适用于所有体系结构。没有特定于大小的后缀。您将需要使用强制转换 #define myprint(

我的问题和你一样,只是我在写C

如何初始化一个文本数字,使其类型为
size\u t

基本上,我有一个相当于以下内容的宏:

#define myprint(S) { printf("hello %zu", S); }
我想这样使用它:

myprint(0);
但我得到的信息是:

格式“%zu”要求参数类型为“size\u t”,但参数类型为“int”


我尝试过编写
0lu
,但它并不适用于所有体系结构。

没有特定于
大小的后缀。您将需要使用强制转换

#define myprint(S) { printf("hello %zu", (size_t)S); }

考虑到这是如何使用的,无论如何这是最好的方法。

这没有文字后缀。使用演员阵容:
(size\u t)foo
@EricPostpischil这就是我担心的。也许您可以添加您的注释作为答案?您还应该在扩展中的宏参数周围加上括号。更安全的版本:
#定义myprint(S)((void)(Generic((S),int:0,size_t:0),printf(“hello%zu”,(size_t)(S))
最安全的版本
void myprit(const size_t size){…}