Функция прототипа C - объектный файл - PullRequest
0 голосов
/ 25 сентября 2019

При компиляции исходного файла ac в Linux, как обрабатывается функция-прототип?Хранится ли символ в объектном файле (отформатирован как файл ELF) или подпись сохраняется для ссылки на него при связывании?Например:

#define MAX 32
typedef struct{
    float[3][3];
}Tensor_t;

float tensor_trace(Tensor_t* t);

Распределен ли тензор где-то в другом месте?

1 Ответ

1 голос
/ 25 сентября 2019

Кстати, вам нужно дать массиву float имя.

Если вы скомпилируете указанный источник как файл C, результатом будет пустой объектный файл.Символ не будет сохранен.

Если вы используете указанный источник в качестве файла заголовка, включенного в другой файл C, который не вызывает tensor_trace(), в объектном файле не будет сохранен символ дляit.

Если вы используете указанный источник в качестве файла заголовка, включенного в другой файл C, который выполняет , вызывает tensor_trace(), для объектного файла будет сохранен символ.В месте генерирования вызова размещается ссылка на этот символ.Компоновщик разрешит эту ссылку для функции, которая должна быть определена в другом модуле.

Итак, чтобы ответить на ваш вопрос:

Распределено ли "tennors_trace" где-нибудь?

Машинный код для tensor_trace() будет «выделен» в модуле, который его определяет.Объявление не выделяет какой-либо пробел.

...