The function is written without a compiler compatible with C89; It will work with older compilers. This definition is not a function prototype.
int function(arg1, arg2) int arg1; char *arg2; { }
Note that the argument definitions should not be in the same sequence as the function line (I had to convert the code from this K & R notation to the prototype notation, where they were out of order!). Also note that earlier you could just write:
main(argc, argv) char **argv; { ... }
The implied type for argc was int , as it was not specified as anything else. Glib code is unlikely to use this license. Similarly, the return type of main() was int , because no other type was specified.
strong_alias refers to hiding and exporting characters in shared libraries. I have not used it, so I am not sure about all the branches, but I believe that this means that __pthread_equal() is a different name for the pthread_equal() function.
One of the reasons underlying __pthread_equal() is because names beginning with an underscore followed by a lowercase letter or other underscore are “reserved for implementation” by the C. standard. Names such as 'pthread_equal ()' are in the user namespace in accordance with the standard C.
ISO / IEC 9899: 1990 (C99 standard) states:
7.1.3 Reserved Identifiers
Each header declares or defines all identifiers listed in the corresponding subclause, and does not necessarily declare or defines identifiers listed in the future directions of the library associated with it by subparagraphs and identifiers, which are always reserved either for any use or for use as file identifiers of regions.
- All identifiers starting with an underscore, and either an uppercase letter or another underscore, are always reserved for any use.
- All identifiers starting with an underscore are always reserved for use as identifiers with file size in both regular and tag names.
- Each macro name in any of the following subclauses (including the future referral library) is reserved for use as indicated if any of its associated headers are included; unless expressly stated otherwise (see 7.1.4).
- All identifiers with external links in any of the following subclauses (including future directions of libraries) are always reserved for use as identifiers with external links. 154)
- Each identifier with a file area specified in any of the following subclauses (including future library directions) is reserved for use as a macro name and as an identifier with a file area in the same namespace if any of the related headers are included.
No other identifiers are reserved. If a program declares or defines an identifier in the context in which it is reserved (except as permitted in accordance with clause 7.1.4), or defines a reserved identifier as a macro name, the behavior is undefined.
154) The list of reserved identifiers with external communication includes errno , math_errhandling , setjmp and va_end .