【问题标题】:How to write custom sizeof() function in c?如何在 c 中编写自定义 sizeof() 函数?
【发布时间】:2021-08-01 17:02:53
【问题描述】:

我想为 c sizeof() 运算符实现一个替代的自定义函数。我从互联网上得到了以下定义,它的工作非常好。

#define my_sizeof(type) (char *)(&type+1)-(char*)(&type)

但不是预处理器(#define 宏)函数,我想将其实现为一个单独的函数,如下所示。 谁能帮我完成 sizeof_custom() 的定义?

注意:为什么我想以这种方式实现是为了了解我在尝试使用 void 指针实现它并找到差异时遇到的困难的原因(我理解 void 指针不允许算术运算,但是我如何构建这个函数?)。请帮忙。

#include <stdio.h>

return_type sizeof_custom ( arg )
{
....
....
// return the size of the variable
}

void main() 
{
int a;  // It can be int, float, char,....
printf("size = %d", sizeof_custom(a));
}

【问题讨论】:

  • sizeof 不是一个函数,它是一个表达式,它是语言的一部分(因此被编译器特殊对待)
  • @UnholySheep 它是一个运算符。
  • 为什么,为什么,为什么,......?您可以这样做,但这只是因为编译器中隐藏了所有准备好的sizeof
  • Why is sizeof considered an operator?。许多事情不能通过代码完成,必须依赖编译器功能或内置

标签: c sizeof


【解决方案1】:

无法使用其他语言功能实现sizeof 运算符。它是语言的一部分,必须由编译器实现。最重要的是:

  • 数组类型不会衰减为指针
  • sizeof 中的表达式未计算
  • 可变长度数组经过特殊处理

【讨论】:

  • 什么是 VLA?我已经使用 C 多年了,从来没有听说过?
  • @OmarL 可变长度数组。如int sz = user_input(); int arr[sz];
  • @OmarL 别担心...... VLA 是你永远不想使用的东西。
  • 另外@4386427 VLA 从 C11 开始是可选的......最好改为 C99 :-)
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 2021-09-21
相关资源
最近更新 更多