c - strlen(s) 和 (strlen)(s) 之间有什么区别吗?

标签 c function

<分区>

在 bstrlib.c(bstring 库)中,有几个地方将函数调用放在圆括号中。目的是什么?

代码片段:

bstring bfromcstr (const char * str) {
bstring b;
int i;
size_t j;

  if (str == NULL) return NULL;
  j = (strlen) (str);
  i = snapUpSize ((int) (j + (2 - (j != 0))));
  if (i <= (int) j) return NULL;

  b = (bstring) bstr__alloc (sizeof (struct tagbstring));
  if (NULL == b) return NULL;
  b->slen = (int) j;
  if (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) {
    bstr__free (b);
    return NULL;
  }

  bstr__memcpy (b->data, str, j+1);
  return b;
}

我自己尝试了一些东西:

int main(){
  char *s = {"hello"};
  int length = strlen(s);  
  //int length = (strlen)(s);   // this produce the same output as the above line
  printf("length = %d\n", length);
  return 0;
}

最佳答案

strlen(s)(strlen)(s) 都是一样的。

因为 strlen() 在调用它时是一个函数,所以不需要在函数名称两边加上方括号。

有一种叫做函数指针的东西,在声明和调用它们时需要括号。

当有一个同名的宏时,为了区分它们,你可以用括号括起来。

关于c - strlen(s) 和 (strlen)(s) 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27644805/

相关文章:

c - 我的插入代码在 c 中无法正常工作

C - 使用 execl 自杀的线程

c - 二分查找修改

C++ 指向函数的指针,初学者问题

javascript - 这个 JavaScript 片段是什么意思?

c - 如何找出哪些文件与 "-lc"链接?

c++ - C中关于除以零的一些事情

function - 将可选回调传递给 Swift 函数

javascript - 访问控制台中 Javascript 函数内的多个变量之一。

linux - linux "clock()"函数是否计入进程的 "sleep"时间?