Die (nicht normative) Appendix J.2 des C11 Standardentwurf der unter Beispiele für undefinierten Verhalten folgenden aufgeführt:
- eine Funktion Objekt, Typ oder Makro, das als deklariert angegeben wird oder durch eine Standard-Header definiert ist, bevor ein Header verwendet, die erklärt oder definiert sie enthalten ist (7.1.2)
wie jedoch von Keith Thompson wies darauf hin, die 7.1.4p2 sagt:
2 Sofern eine Bibliotheksfunktion ohne Verweis auf einen in einem Header definierten Typ deklariert werden kann, ist es auch zulässig, die Funktion zu deklarieren und ohne den zugehörigen Header zu verwenden.
mit So puts
ohne einschließlich <stdio.h>
kann in der Tat in standardkonformer Weise erfolgen. Sie können jedoch fputs
nicht deklarieren, da es einen Zeiger auf FILE
als ein Argument erfordert, das Sie in einer streng übereinstimmenden Weise nicht ausführen können.
Darüber hinaus könnte puts
auch ein Makro in Anwesenheit von <stdio.h>
sein und zu etwas schneller in der Gegenwart des Headers erweitern.
Alles in allem ist die Anzahl der Funktionen, die richtig deklariert werden können, ohne Header zu enthalten, nicht so groß. Wie für die Funktionen, die einige Typen aus den Headern verwenden - wenn Sie mit Sprache-Anwalt Tag über C fragen, kommt die Antwort aus dem Standard und der Standard ist ziemlich offen über dies: tun Sie es nicht, oder Ihre Programm wird nicht streng entsprechen, Zeitraum.
Bestimmte Funktionen können als Makros definiert werden – user3159253
Sie alle Dinge nachschlagen kann 'stdio.h' bietet durch den C99-Standard gerade Abschnitt ** 7,21 Eingang/Ausgang' ' ** –
Es ist eine sehr schlechte Idee zu erklären, externe Funktionen selbst statt die entsprechende Header-Datei enthalten. Es ist nicht klar, welches Problem du denkst, dass du es löst, aber ich kann dir versichern, dass du es nicht bist. –