Source Files ------------ .. crowbar:element:: HeaderFile <- IncludeStatement* HeaderFileElement+ .. crowbar:element:: HeaderFileElement <- TypeDefinition / FunctionDeclaration / ConstantDefinition / UninitializedVariableDeclaration A Crowbar header file defines an API boundary, either at the surface of a library or between pieces of a library or application. :crowbar:ref:`IncludeStatement`\ s can only appear at the beginning of the header file, and header files cannot define behavior directly. Conventionally, a header file has a ``.hro`` file extension. .. crowbar:element:: ImplementationFile <- IncludeStatement* ImplementationFileElement+ .. crowbar:element:: ImplementationFileElement <- TypeDefinition / VariableDefinition / FunctionDefinition A Crowbar implementation file defines the actual behavior of some piece of a library or application. It can also define internal types, functions, and variables. :crowbar:ref:`IncludeStatement`\ s can only appear at the beginning of the implementation file. Conventionally, an implementation file has a ``.cro`` file extension.