Рассмотрим этот код:
#include <cstdio>
int get_value() { asm("movl $254, %eax"); }
int main() { printf("%d\n", get_value()); }
Теперь, если кто-то компилирует этот код с g++ main.cpp
, он получает предупреждение компилятора (но код все еще компилируется):
main.cpp: In function ‘int get_value()’:
main.cpp:3:43: warning: no return statement in function returning non-void [-Wreturn-type]
3 | int get_value() { asm("movl $254, %eax"); }
|
Поскольку этот ответ говорит, что если компилятор генерирует двоичный файл с указанным выше кодом, все ставки отключены. (нет оператора возврата из функции с возвращаемым типом int)
Действительно, когда кто-то компилирует этот код с включенной оптимизацией g++ -O3 main.cpp
, эта программа немедленно вызывает ошибки.
Итак, мой вопрос: как можно вернуться из встроенной сборки в функции c ++, которая совместима с C ++, и не получить это предупреждение, и код работает нормально.