статическая функция и assembler
От: wils0n www.atzone.org
Дата: 18.06.08 09:57
Оценка:
Доброго времени суток!

Сразу оговорюсь, что использую 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


Что считаю справедливым. Но программа тем не менее работает.
Можно ли сделать так, чтоб компилятор не ругался?
gcc 4.2
Re: extern ?
От: Слава Израиль  
Дата: 18.06.08 10:06
Оценка:
Здравствуйте, 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.
Спасибо за внимание
Re[2]: extern "C"? (-)
От: Erop Россия  
Дата: 18.06.08 10:15
Оценка:
С>Subj.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: extern ?
От: wils0n www.atzone.org
Дата: 18.06.08 10:54
Оценка:
Здравствуйте, Слава, Вы писали:

С>Здравствуйте, 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.
gcc 4.2
Re[3]: extern ?
От: Слава Израиль  
Дата: 18.06.08 11:12
Оценка:
Здравствуйте, wils0n, Вы писали:

W>Хм... по ходу я хочу противоречивого. Реализуя функцию на ассемблере в отдельном файле мы делаем её заведомо extern. (Правильно?)


Да, она будет в другом обжект — файле, не том, в котором код на С. Значит её будет видно из тех файлов, которые опишут её у себя через extern "C".

W>И тем самым она станивтся видна всем. Обявление

W>static void func1()
W>тога становится бессмысленным. Отсюда и возмущения компилятора.
W>Тогда придётся вернутся ко встроенному ассемблеру, так как хочется static.

Со встроенным ассемблером будешь иметь проблемы с х64 , так что придётся выбрать.
Спасибо за внимание
Re[4]: extern ?
От: wils0n www.atzone.org
Дата: 18.06.08 11:16
Оценка:
Здравствуйте, Слава, Вы писали:

С>Со встроенным ассемблером будешь иметь проблемы с х64 , так что придётся выбрать.


Какого плана проблемы, если не секрет? А то я пока не встречал. Может потом вылезут?
Пока всё тестируется на Intel. Будут проблемы с AMD?
gcc 4.2
Re[5]: extern ?
От: Слава Израиль  
Дата: 18.06.08 11:22
Оценка: 1 (1)
Здравствуйте, wils0n, Вы писали:

W>Здравствуйте, Слава, Вы писали:


С>>Со встроенным ассемблером будешь иметь проблемы с х64 , так что придётся выбрать.


W>Какого плана проблемы, если не секрет? А то я пока не встречал. Может потом вылезут?

W>Пока всё тестируется на Intel. Будут проблемы с AMD?

Честно говоря, я работаю в микросовтовской студией. А у них компилятор для х64 не знает что такое встроенный ассемблер. Я сожалею, но я не интеросовался как с этим дела обстоят в gcc, прошу прощения что поторопился с высказыванием.
Спасибо за внимание
Re[6]: extern ?
От: wils0n www.atzone.org
Дата: 18.06.08 11:29
Оценка:
Здравствуйте, Слава, Вы писали:

С>Честно говоря, я работаю в микросовтовской студией. А у них компилятор для х64 не знает что такое встроенный ассемблер. Я сожалею, но я не интеросовался как с этим дела обстоят в gcc, прошу прощения что поторопился с высказыванием.


а...вот в в чём дело! Тоже полезная информация. Думаю, когда-нибудь придётся делать версию для M$. Так что учту.
gcc 4.2
Re: статическая функция и assembler
От: Pzz Россия https://github.com/alexpevzner
Дата: 18.06.08 14:20
Оценка: 1 (1)
Здравствуйте, wils0n, Вы писали:

W>
W>statis void do_something();
W>

W>и где-то ниже её реализация.

W>Но вот задумалось мне написать эту функцию на ассемблере. Если использовать встроенный ассемблер, то всё здорово.

W>Но если реализовать её в отдельном файле do_something.s и под потом подлинковать, то
W>компилятор ругается:

static в описании функции значит, что она видна только в пределах данного модуля (т.е., файла). А вы ее выносите во внешний модуль. Тут надо extern (в прототипах функций он подразумевается).
Re[2]: статическая функция и assembler
От: wils0n www.atzone.org
Дата: 18.06.08 23:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>static в описании функции значит, что она видна только в пределах данного модуля (т.е., файла). А вы ее выносите во внешний модуль. Тут надо extern (в прототипах функций он подразумевается).


Спасибо, уже понял!
gcc 4.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.