Does the Return Type Influence Function Signature?
In C , functions declared without function templates exclude their return type in their signatures. Overloading functions solely based on differing return types is prohibited.
Detailed Explanation
The relationship between functions, their declarations, and signatures is complex.
Declaration and Entity
A function declaration can declare a function entity or a template entity. Ordinary functions and explicit specializations of function templates belong to the first category. Primary function templates or explicit specializations with unspecified arguments fall into the latter category.
Signature Definition
According to the C Standard (1.3.10), the function signature encompasses the following:
However, this definition lacks mention of the return type.
Function Templates and Return Types
Contrariwise, the signature of a function template specialization includes both the function signature and return type (14.5.5.1).
So, What Exactly Constitutes a Signature?
For non-template functions, the signature excludes the return type. However, for template specializations, the return type is incorporated.
Implication for Overloading
The Standard prohibits overloading based solely on differing return types. It remains ambiguous as to what constitutes such a distinction, though.
Compiler Behavior
Major compilers reject the following code due to incompatible types:
int f(); double f(); // invalid
However, they accept:
template<typename T> int f(); template<typename T> double f(); // invalid?
Conclusion
The return type, although not part of the signature for non-template functions, is crucial in determining function type compatibility. Understanding these nuances is essential for effective C programming.
The above is the detailed content of Does C Function Signature Include the Return Type?. For more information, please follow other related articles on the PHP Chinese website!