Two compilation problems encountered


Recently, I encountered two compilation problems, which took a lot of effort.

container_ Of question

I defined container in one place_ Of macro, but repeated compilation errors
Macro is defined as follows:

#define container_of(ptr, type, member) ({\
    const typeof( ((type *)0)->member ) *__mptr = (ptr);\
    (type *)( (void *) ( (char *)__mptr - offsetof(type,member) ) );})

The error is as follows:

error: expected declaration specifiers or '...' before '(' token

At the beginning, Google couldn’t connect. The information found by Baidu said that there was something wrong with the. H file, but I carefully checked my file, and there was no problem.
Later, Google was able to search and found the answer on the familiar stackoverflow
The solution is to add two underscores in front of typeof

#define container_of(ptr, type, member) ({\
    const __typeof( ((type *)0)->member ) *__mptr = (ptr);\
    (type *)( (void *) ( (char *)__mptr - offsetof(type,member) ) );})

strtok_ R problem

I use strsok_ K to split the string, also containsHeader file, I didn’t expect to report errors all the time

implicit declaration of function ‘strtok_r’

After searching, the solution is the same as above, just add two underscores in front, that is to use__ strtok_r