No, they are not language specific. Both C and C++ makes use of them.
https://gcc.gnu.org/onlinedocs/gcc-3.1/cpp/Include-Syntax.html
Both user and system header files are included using the preprocessing
directive ‘#include’. It has two variants:
#include <file>
This variant is used for system header files. It searches for a file
named file in a standard list of system directories. You can prepend
directories to this list with the -I option (see Invocation).
#include "file"
This variant is used for header files of your own program. It searches
for a file named file first in the directory containing the current
file, then in the quote directories and then the same directories used
for <file>. You can prepend directories to the list of quote
directories with the -i quote option. The argument of #include,
whether delimited with quote marks or angle brackets, behaves like a
string constant in that comments are not recognized, and macro names
are not expanded. Thus, #include <x/*y> specifies inclusion of a
system header file named x/*y.
However, if backslashes occur within file, they are considered
ordinary text characters, not escape characters. None of the character
escape sequences appropriate to string constants in C are processed.
Thus, #include "x\n\\y" specifies a filename containing three
backslashes. (Some systems interpret \ as a pathname separator. All
of these also interpret / the same way. It is most portable to use
only /.)
It is an error if there is anything (other than comments) on the line
after the file name.