sizeof 是函数还是运算符?

Run*_*Run 6 c operators sizeof function-call

为什么说sizeof(variable)是运算符,而不是函数?

它看起来像一个函数调用,当我考虑运算符的含义时,在我看来像+or-*等等

tad*_*man 5

它是一个运算符,因为它不像函数那样接受参数。它在语法级别运行。

f(int)不是有效的函数调用,而是sizeof(int)有效使用sizeof.

它还可以对变量或类型进行操作,它的设计非常灵活,这是运算符可以做的事情,因为它已经深入到 C 语法中。

可以在此处找到更多详细信息。


Nag*_*gev 5

它是一个运算符,您不需要使用方括号,除了“当操作数是类型名称时,它必须包含在括号中”。这是一个语法限制,但不应与函数调用混淆。

请参阅下面来自 GNU文档的最后一个示例:

size_t a = sizeof(int);
size_t b = sizeof(float);
size_t c = sizeof(5);
size_t d = sizeof(5.143);
size_t e = sizeof a;
Run Code Online (Sandbox Code Playgroud)

如果类型名称没有括号,您可能会看到这样的错误,使用 gcc 编译器:

test.c:7:20: error: expected expression before ‘int’
    7 |  size_t s = sizeof int;
      |                    ^~~
Run Code Online (Sandbox Code Playgroud)

但是做sizeof 12还是没问题sizeof a