linux中定义的c ++ size_t在哪里?

15 c++

现在我正在讨论程序员使用typedef关键字的新类型定义.只要我的学生习惯使用size_t类型(例如使用funciton length()),我必须要求他们稍微努力才能"相信"它是一个整数类型,我认为它会很棒显示noew定义此类型的位置.

所以,我在/ usr/include中已经在ubuntu框中做了很多grep,而我看到的是size_t反过来又是对size_type的重新定义,而这又是对metadata_type的重新定义,这就是目录.找不到最终的"typedef unsigned int metadata_type;".

在/ usr/src我找到了anohter以前的类型叫yy_size_t,...

但是,无论如何我都无法走到链的尽头.

有谁知道在哪里找出最终的定义来检查它是无符号的int(或类似的)?可能我想念我的盒子里的开发包吗?在这种情况下,为什么我能够使用size_t类型编译程序?

Ste*_*sky 23

您可以尝试使用C预处理器(cpp)手动扩展标准包含文件,并检查其输出:

$ echo '#include <stdlib.h>' | cpp -I/usr/include - > stdlib-expanded.c
Run Code Online (Sandbox Code Playgroud)

您会发现cpp甚至包括标记的输出,以指示stdlib-expanded.c包含代码的文件.

  • +1只是'echo'#include <stdlib.h>'| cpp -I/usr/include | grep size_t`给`typedef long unsigned int size_t;`作为第一行 (3认同)

APr*_*mer 6

gcc提供了一些标题,这里是相关的:size_t定义在stddef.h哪个标题中.这是例如/usr/lib/x86_64-redhat-linux/4.1.1/include/stddef.h.有的定义size_t

typedef __SIZE_TYPE__ size_t;
Run Code Online (Sandbox Code Playgroud)

__SIZE_TYPE__ 是一个编译器预定义的宏(它允许确保编译器和头一致,并且,正如编译器所期望的那样依赖于它的参数 - 例如,使用-m32,它是无符号的32位,并且-m64是无符号的64位)位类型 - ,使标头独立于编译器参数).