问题
I keep running across little conventions like __KERNEL__.
Are the __ in this case a naming convention used by kernel developers or is it a syntax specific reason for naming a macro this way?
There are many examples of this throughout the code.
For example some functions and variables begin with an _ or even __.
Is there a specific reason for this?
It seems pretty widely used and I just need some clarification as to whether these things have a syntactical purpose or is it simply a naming convention.
Furthermore I see lots of user declared types such as uid_t. Again I assume this is a naming convention telling the reader that it is a user-defined type?
回答1:
There are several cases:
- In public facing headers, i.e. anything that libc will be taking over and putting under
/usr/include/linux, the standards specify which symbols should be defined and any other symbols specific to the system shall start with underscore and capital letter or two underscores. That's the reason for__KERNEL__in particular, because it is used in headers that are included both in kernel and in libc and some declarations are different. - In internal code, the convention usually is that symbol
__somethingis workhorse forsomethingexcluding some management, often locking. That is a reason for things like__d_lookup. Similar convention for system calls is thatsys_somethingis the system call entry point that handles context switch to and from kernel and callsdo_somethingto do the actual work. - The
_tsuffix is standard library convention for typedefs. E.g.size_t,ptrdiff_t,foff_tand such. Kernel code follows this convention for it's internal types too.
来源:https://stackoverflow.com/questions/9432111/what-is-the-meaning-of-leading-and-trailing-underscores-in-linux-kernel-identifi