Да, C и Python довольно разные в этом отношении.
Правильно, что препроцессор заменяет директиву #include
содержимым включенного файла до компиляции.
Приводит ли это к ошибке компиляции или нет, полностью зависит от содержимого включенного файла. Стандартные заголовки, такие как stdio.h
, не содержат никаких исполняемых операторов - они содержат только такие вещи, как typdefs, объявления функций, другие макросы и т. Д. У них также обычно есть какие-то элементы защиты #include
, которые не позволяют им загружаться более один раз за единицу перевода (то есть, если вы #include
файл, который включает stdio.h
, а затем #include <stdio.h>
непосредственно в том же исходном файле, содержимое stdio.h
будет загружено только один раз).
Теоретически , нет проблем с включением stdio.h
в случайных точках в коде, но это может привести к проблемам. В этом случае все содержимое stdio.h
будет видно только телу f
- не проблема, если только f
нужно что-либо использовать в stdio.h
, но в противном случае это приведет к головным болям.
Стандартные заголовки лучше всего включать в начале исходного файла.