Source Files ------------ .. crowbar:element:: HeaderFile <- IncludeStatement* HeaderFileElement+ HeaderFileElement <- TypeDefinition / FunctionDeclaration / VariableDefinition / VariableDeclaration 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+ 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.