2015-02-25 2 views
0

У меня есть файл .h и три файла .cpp. Все файлы cpp содержат файл .h. Я хочу создать бесполезную функцию в одном из файлов cpp и использовать псевдоним в других файлах cpp, чтобы ссылаться на эту бесполезную функцию. Но если я переведу функцию from important.cpp на useless.cpp, она больше не хочет компилироваться. По какой-то причине он не видит функцию, даже если ее объявлено в заголовке.Псевдоним функции в другом исходном файле

useless.h

#ifdef __cplusplus 
extern "C" { 
#endif 
    extern void useless(void); 
#ifdef __cplusplus 
} 
#endif 

useless.cpp

#ifdef __cplusplus 
extern "C" { 
#endif 
    void useless(void) { } 
#ifdef __cplusplus 
} 
#endif 

important.cpp

void important(void) __attribute__((alias("useless"))); 

ошибка: 'аннулируются важно()' совмещенным с неопределенным символом 'бесполезно' void important (void) атрибут ((псевдоним ("use Меньше")));

+0

Почему вы не можете '#define важный бесполезный'? –

+0

Этот вопрос специфичен для конкретного компилятора. Вероятно, gcc. Вы должны сделать это ясно в своем вопросе и в тегах. Бесполезная функция не может быть определена как внешняя функция «C». См. Https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html. – chmike

ответ

0

Почему вы используете кучу extern "C"?

Если это проект на C++ и глобальная функция C++, вы действительно должны утверждать, что это функция C. Это может привести к неопределенным ошибкам ссылочного типа, поскольку имена символов различаются для C и C++.

0

То, что вы пытаетесь сделать, возможно, невозможно. Посмотрите на Gcc документы https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html Он говорит:

It is an error if ‘__f’ is not defined in the same translation unit.

Так что если вы удалите useless из ЕП, где important это выглядит ошибкой для меня.

Смежные вопросы