There was a requirement to include #!/bin/bash in the first line of all files in a project to create static libraries, but during compilation of the object file, the compiler gave me the message:
In file included from 0-isupper.c:1:
main.h:1:2: error: invalid preprocessing directive #!
1 | #!/bin/bash
| ^
The error indicated is the !
So, I want to know if header files do or do not contain shebang.
A shebang line only belongs in executable (script) files. It is interpreted by the kernel when the file is executed. You'd have to be doing something like ./header.h
to execute the header so that the kernel pays attention to the shebang line, and the header would have to be executable as well.
Header files should never be executable, so a header file has no need for a shebang line.
Further, as your compiler correctly pointed out, a shebang line (line 1 starting with #!
is not valid C. The C preprocessor interprets the #
as meaning 'there is a preprocessor directive after this', but no valid (standard) C preprocessor directive starts with a !
(bang).
It is not clear why creating static libraries would ever require a shebang line. I'd normally be using makefiles to control the building of libraries, and those don't usually have shebang in them. (If you use #!/usr/bin/make -f
as the shebang, you can use it, but that's very, very non-standard.)
Consequently, there is some misunderstanding about the meaning of the instruction that there was "a requirement to include #!/bin/bash
in the first line of all files in a project to create static libraries". However, there are at least two possibilities:
It's more likely, I think, that you've misinterpreted their intention, possibly because you didn't read carefully enough or possibly because they did not specify what was intended carefully enough.