Имеет ли статическая встроенная функция C идентичность во время выполнения?
Статическая встроенная функция имеет идентичность в модуле компиляции, если компилятор хотя бы один раз решил не вставлять ее в строку или если вы используетеадрес функции.
Полученный адрес действителен только в текущем модуле компиляции (файл .c
).В другом модуле компиляции (другом файле .c
) компилятор даст вам другой адрес.
Как и в случае любой другой функции с телом, видимым для компилятора, код из функции может быть полностью или частично реплицирован.в различных местах кода ассемблера, сгенерированного компилятором.
Статическая встроенная функция (как любая статическая функция) не видна ни в каком другом файле .c
, кроме скомпилированного в данный момент .c
файла.
Должен ли я беспокоиться о конфликте имен этих конструкций?
Только если вы берете адрес статической встроенной функции, определенной в заголовочном файле, и делаете следующее:
- Статическая встроенная функция
f
определена в файле a.h
a.h
включена в файлы C x.c
и y.c
x.c
дублейадрес f
и сохраняет его в глобальной переменной f_addr
y.c
берет адрес f
и сравнивает его для идентификации со значением, хранящимся в f_addr
- ТамРезультатом сравнения будет
false
, несмотря на то, что на другом уровне абстракции это та же самая функция f
Если функцияопределяется в .c файле?Это то же самое?
С точки зрения компилятора C, это то же самое, что определение функции в заголовочном файле и включение заголовочного файла в файл .c.Компилятор не имеет представления о заголовочных файлах, он видит только один модуль непрерывной компиляции.Заголовочный файл - это концепция, которая существует в умах программистов, использующих язык C - эта концепция не существует с точки зрения компилятора C.