简体   繁体   中英

What kind of structure of C that place parenthesises before function call?

I came across this line of code today in process and thread chapter of C programming book:

printf("[Child]  child thread id: 0x%x\n", (unsigned int)pthread_self());

I've never seen the part (unsigned int)pthread_self() , I don't know what the first pair of parenthesises is used for. Any idea?

ps:

I remember that in the documentation of php, there's similar expression for function documentation:

int time()

but in actual code, we only use the part time() , int is for documentation purpose to show the return value of function time()


Update:

I type the example code in the book that test the each thread id:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>

int global = 5;

void* ChildCode(void* arg) {
    int local = 10;

    global++;
    local++; 
    printf("[Child]  child thread id: 0x%x\n", (unsigned int)pthread_self());
    printf("[Child]  global: %d  local: %d\n", global, local);

    pthread_exit(NULL);
}

int main() {
  pthread_t  childPid;
  int       local = 10;

    printf("[At start]  global: %d  local: %d\n", global, local);

  /* create a child thread */
  if (pthread_create (&childPid, NULL, ChildCode, NULL) != 0)
  {
    perror("create");
    exit(1);
  } else { /* parent code */
    global++;
    local--; 
    printf("[Parent] parent main thread id : 0x%x\n", (unsigned int)pthread_self());
    printf("[Parent] global: %d  local: %d\n", global, local);
    sleep(1);
  }
  printf("[At end] global: %d  local: %d\n", global, local);
  exit(0);
}

and it gives me some note(not warning not error):

clang example_thread.c 
/tmp/example_thread-9lEP70.o: In function `main':
example_thread.c:(.text+0xcc): undefined reference to `pthread_create'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I've no idea with the code, any idea?

The return value of pthread_self() is a pthread_t (see man pthread_self ).

(unsigned int) pthread_self() is used to cast the return value of pthread_self() into an unsigned integer.

For more information about casting in C see http://www.aui.ma/personal/~O.Iraqi/csc1401/casting.htm

This is just casting of the return value of the function to unsigned int .

It is just like:

pthread_t pthread_self_result;
pthread_self_result = pthread_self();
printf("[Child]  child thread id: 0x%x\n", (unsigned int)pthread_self_result);

The parentheses are casting the return value of pthread_self to unsigned int . pthread_self returns pthread_t , which is an unspecified arithmetic type that is not appropriate for use with printf .

This is what is called in C a "type cast" Here we cast the pthread_t type into an unsigned int to print it. Please refer to your C language manual

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM