Start with the system headers.
If there is no dependency between the headers between the two headers, but since programming is essentially related to communication, not to the computer, but to other people, it is important to make it logical and understandable. And I think it's better to start with the system headers.
I base this one of my very first programming courses (in 1984, I think), where we programmed in Lisp and taught to think this way: you start with the usual Lisp language, and then create a new language that is more useful for your application, adding some functions and data types. If you, for example, add dates and the ability to manipulate dates, this new language can be called Lisp -with-date. You can then use Lisp -with-dates to create a new language with calendar functions, which could be called Lisp -with-calendars. Like layers in a bow.
Similarly, you can see that C has a “main” language without any headings, and then you can, for example, extend that language to a new, larger language with I / O functions using #including stdio.h. You add more and more material to your main language with #, including more headings. (I know that the term “C language” in other contexts refers to the entire standard with all the standard headers, but they carry me here.) Each new #include header creates a new, larger language and an additional onion layer.
Now it seems to me that the standard headers should obviously be the inside of this bow and, therefore, before the custom headers. You can create C-with-monsters by adding material to C-with-I / O, but the people who created C-with-I / O did not start with C-with-monsters.
source share