C语言中是否有const函数?

5

我的意思是,我们是否可以在C中将函数声明为const,例如:

void fun(int iVar) const;

int g_var = 1;

void fun(int iVar)
{
  //do some thing
  g_var = iVar;
}

4
在提问前,你尝试过它或查看文档了吗?而且你希望 const 在那里做什么?这在C++中既不合法也没有意义。 - Jim Balter
1个回答

18
不在标准C中,因为没有类或对象(如“类实例,即带有相关函数的数据集合”),因此函数“const”“针对”的对象不存在。
理论上可能会有这样一种符号表示“此函数没有全局可见的副作用,它是其输入参数的纯函数”,但现在还没有。
GNU GCC编译器支持,作为扩展,将函数声明为constpure
int square(int) __attribute__((pure));

__attribute((pure)) 部分是特定于GCC的。


2
这取决于你对对象的理解。C确实有对象,但没有类。 - P.P
3
请注意,OP中的函数绝非纯函数。 - Medinoc
@user2706540 你可以查一下,自己找出答案。 - Jim Balter
@KingsIndian 在“类或对象”的上下文中,C语言如何拥有对象?你是指将函数指针作为结构体成员吗?如果是这样,那么这并不意味着C语言拥有对象(或者说,拥有与对象相关的关键字),就像使用C结构体实现矩阵并不意味着C语言拥有矩阵一样。 - hyde
4
在C语言中,“对象”指的是“在执行环境中的数据存储区域,其内容可以表示值”(C11 3.15.1)。它们与面向对象编程(OOP)的对象不是同一概念。我猜KingsIndian想表达的是OOP并不拥有这个术语的专有权。 - Crowman
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接