Defect Report #084
Submission Date: 03 Dec 93
Submittor: WG14
Source: Clive Feather
Question
Item 21 - incomplete type in function declaration
Consider the following declarations:
struct tag;
extern void (*f) (struct tag);
At the point of the declaration of f, the type of the parameter
is incomplete. Now a parameter is an object (subclause 3.15) with
no linkage (subclause 6.1.2.2), but it is unclear whether this is
a declaration of the parameter. If it is, then the declaration of
f is forbidden by subclause 6.5. If it is not, then the declaration
is strictly conforming. Which is the case?
If the type struct tag is completed before a call to f,
is the call strictly conforming? Alternatively, since the declaration
of f includes an incomplete type, is it possible to make a call to it at all?
Response
From subclause 6.5.2.3, the incomplete type specified by the tag may be used,
unless the size of the corresponding object is needed.
In responding to Defect Reports, the Committee has discussed at
length when the size of an object is actually required. The C
Standard is inconclusive with regard to whether or not the size
of the structure is needed in the example given, leaving the
behavior undefined.
The Committee should revisit this issue during the revision of the C Standard.
Previous Defect Report
< - >
Next Defect Report