Сразу оговорюсь, что использую gcc 4.1.2 под linux (64bit)
Итак в программе используется файл file.c с заголовками в file.h
причём в file.c объявлена функция
statis void do_something();
и где-то ниже её реализация.
Но вот задумалось мне написать эту функцию на ассемблере. Если использовать встроенный ассемблер, то всё здорово.
Но если реализовать её в отдельном файле do_something.s и под потом подлинковать, то
компилятор ругается:
./file.c:18: warning: ‘do_something’ used but never defined
Что считаю справедливым. Но программа тем не менее работает.
Можно ли сделать так, чтоб компилятор не ругался?
Здравствуйте, wils0n, Вы писали:
W>Доброго времени суток!
W>Сразу оговорюсь, что использую gcc 4.1.2 под linux (64bit) W>Итак в программе используется файл file.c с заголовками в file.h W>причём в file.c объявлена функция
W>
W>statis void do_something();
W>
W>и где-то ниже её реализация.
W>Но вот задумалось мне написать эту функцию на ассемблере. Если использовать встроенный ассемблер, то всё здорово. W>Но если реализовать её в отдельном файле do_something.s и под потом подлинковать, то W>компилятор ругается:
W>
W>./file.c:18: warning: ‘do_something’ used but never defined
W>
W>Что считаю справедливым. Но программа тем не менее работает. W>Можно ли сделать так, чтоб компилятор не ругался?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, wils0n, Вы писали:
W>>Доброго времени суток!
W>>Сразу оговорюсь, что использую gcc 4.1.2 под linux (64bit) W>>Итак в программе используется файл file.c с заголовками в file.h W>>причём в file.c объявлена функция
W>>
W>>statis void do_something();
W>>
W>>и где-то ниже её реализация.
W>>Но вот задумалось мне написать эту функцию на ассемблере. Если использовать встроенный ассемблер, то всё здорово. W>>Но если реализовать её в отдельном файле do_something.s и под потом подлинковать, то W>>компилятор ругается:
W>>
W>>./file.c:18: warning: ‘do_something’ used but never defined
W>>
W>>Что считаю справедливым. Но программа тем не менее работает. W>>Можно ли сделать так, чтоб компилятор не ругался?
С>Subj.
Хм... по ходу я хочу противоречивого. Реализуя функцию на ассемблере в отдельном файле мы делаем её заведомо extern. (Правильно?)
И тем самым она станивтся видна всем. Обявление
static void func1()
тога становится бессмысленным. Отсюда и возмущения компилятора.
Тогда придётся вернутся ко встроенному ассемблеру, так как хочется static.
Здравствуйте, wils0n, Вы писали:
W>Хм... по ходу я хочу противоречивого. Реализуя функцию на ассемблере в отдельном файле мы делаем её заведомо extern. (Правильно?)
Да, она будет в другом обжект — файле, не том, в котором код на С. Значит её будет видно из тех файлов, которые опишут её у себя через extern "C".
W>И тем самым она станивтся видна всем. Обявление W>static void func1() W>тога становится бессмысленным. Отсюда и возмущения компилятора. W>Тогда придётся вернутся ко встроенному ассемблеру, так как хочется static.
Со встроенным ассемблером будешь иметь проблемы с х64 , так что придётся выбрать.
Здравствуйте, wils0n, Вы писали:
W>Здравствуйте, Слава, Вы писали:
С>>Со встроенным ассемблером будешь иметь проблемы с х64 , так что придётся выбрать.
W>Какого плана проблемы, если не секрет? А то я пока не встречал. Может потом вылезут? W>Пока всё тестируется на Intel. Будут проблемы с AMD?
Честно говоря, я работаю в микросовтовской студией. А у них компилятор для х64 не знает что такое встроенный ассемблер. Я сожалею, но я не интеросовался как с этим дела обстоят в gcc, прошу прощения что поторопился с высказыванием.
Здравствуйте, Слава, Вы писали:
С>Честно говоря, я работаю в микросовтовской студией. А у них компилятор для х64 не знает что такое встроенный ассемблер. Я сожалею, но я не интеросовался как с этим дела обстоят в gcc, прошу прощения что поторопился с высказыванием.
а...вот в в чём дело! Тоже полезная информация. Думаю, когда-нибудь придётся делать версию для M$. Так что учту.
W>и где-то ниже её реализация.
W>Но вот задумалось мне написать эту функцию на ассемблере. Если использовать встроенный ассемблер, то всё здорово. W>Но если реализовать её в отдельном файле do_something.s и под потом подлинковать, то W>компилятор ругается:
static в описании функции значит, что она видна только в пределах данного модуля (т.е., файла). А вы ее выносите во внешний модуль. Тут надо extern (в прототипах функций он подразумевается).
Здравствуйте, Pzz, Вы писали:
Pzz>static в описании функции значит, что она видна только в пределах данного модуля (т.е., файла). А вы ее выносите во внешний модуль. Тут надо extern (в прототипах функций он подразумевается).