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

时间:2014-12-25 06:33:15

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

strlen(s)(strlen)(s)都是相同的。

由于strlen()在调用它时是一个函数,因此不需要在函数名称周围放置括号。

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

当存在具有相同名称的宏时,为了区分它们,您可以使用括号。