首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sizeof(main),sizeof(printf),sizeof(scanf)是什么?

sizeof(main),sizeof(printf),sizeof(scanf)是什么?
EN

Stack Overflow用户
提问于 2010-10-01 19:52:42
回答 1查看 2.9K关注 0票数 8

在gcc的编译器里,sizeof(main)sizeof(printf)sizeof(scanf)都是1,我想知道它们的大小怎么都是1,背后的逻辑是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-01 19:57:44

因为C(99)标准要求(§6.5.3.4/1)

sizeof

运算符不能应用于具有函数类型或不完整类型的表达式,不能应用于此类类型的带括号名称,也不能应用于指定位域成员的表达式。

所以返回值是没有意义的。如果需要函数指针的sizeof,请使用

代码语言:javascript
复制
sizeof(&main)
sizeof(&printf)
sizeof(&scanf)

对于sizeof没有意义的类型,gcc返回1(参见c-common.c):

代码语言:javascript
复制
4187     if (type_code == FUNCTION_TYPE)
4188       {
4189         if (is_sizeof)
4190           {
4191             if (complain && (pedantic || warn_pointer_arith))
4192               pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4193                        "invalid application of %<sizeof%> to a function type");
4194             else if (!complain)
4195               return error_mark_node;
4196             value = size_one_node;
4197           }
4198         else
4199           value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4200       }
4201     else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4202       {
4203         if (type_code == VOID_TYPE
4204             && complain && (pedantic || warn_pointer_arith))
4205           pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4206                    "invalid application of %qs to a void type", op_name);
4207         else if (!complain)
4208           return error_mark_node;
4209         value = size_one_node;
4210       } 
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3838866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档