为什么标准禁止sizeof应用于函数
发布时间:2020-12-16 09:50:53 所属栏目:百科 来源:网络整理
导读:标准C(ISO / IEC 9899:1999)第6.5.3.4节说 The sizeof operator shall not be applied to an expression that has function type or an incomplete type 但为什么 ? 使用readelf检查可执行文件表明在编译期间完全了解函数大小. Symbol table '.symtab' con
标准C(ISO / IEC 9899:1999)第6.5.3.4节说
但为什么 ? Symbol table '.symtab' contains 67 entries: Num: Value Size Type Bind Vis Ndx Name ....... 37: 0000000000400541 16 FUNC LOCAL DEFAULT 13 clean ....... 46: 00000000004005f0 2 FUNC GLOBAL DEFAULT 13 __libc_csu_fini ...... 49: 0000000000000000 0 FUNC GLOBAL DEFAULT UND puts@@GLIBC_2.2.5 52: 00000000004005f4 0 FUNC GLOBAL DEFAULT 14 _fini 53: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_ ed 58: 0000000000400560 137 FUNC GLOBAL DEFAULT 13 __libc_csu_init 62: 000000000040052c 21 FUNC GLOBAL DEFAULT 13 main 这里size 0属于共享库中的函数,例如放置@@ GLIBC_2.2.5函数.所以我检查了libc信息,这里有一段与puts @@ GLIBC_2.2.5相关的readelf -a /lib/x86_64-linux-gnu/libc.so.6输出 Size Type ........... 399: 0000000000070ec0 392 FUNC WEAK DEFAULT 12 puts@@GLIBC_2.2.5 它只是不必要的功能,还是它打破了C哲学,还是有一些我看不到的技术问题? 解决方法
我认为这是因为sizeof仅对对象有意义,对象的表示形式为unsigned char [sizeof(type)].现在在C中,函数没有表示(没有从函数指针类型到数据指针类型的转换),所以你可以说sizeof没有有意义的用法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |