Компилятор C ++ часто искажает имена функций для поддержки многих функций.Программист может подавить искажение имени по умолчанию, используя extern "C" .Однако, почему int main(int, char **)
никогда не затрагивается?
// test.cpp
int max(int a, int b) {
return a > b ? a : b;
}
extern "C" {
int min(int a, int b) {
return a < b ? a : b;
}
}
int main (int argc, char *argv[]) {
return 0;
}
И
$ xcrun --sdk macosx clang -x c++ -c test.cpp -o test
$ xcrun nm -nm test
0000000000000000 (__TEXT,__text) external __Z3maxii
0000000000000030 (__TEXT,__text) external _min
0000000000000060 (__TEXT,__text) external _main
Очевидно, int max(int, int)
искажено до __Z3maxii
;int min(int int)
не содержит искажений с extern "C" аннотацией.
Как главное убежать от искажения?
Есть ли какой-нибудь способ удержать имя от искажения, кроме приведенной выше аннотации?