Вы читали ответ @ Сиро на этот вопрос? В чем разница между 'asm', '__asm' и '__asm __'? .
Это объясняет, что asm
и __asm__
одинаковы, за исключением того, что gcc -std=c99
отключает asm
, оставляя только __asm__
.
asm
- это вспомогательное имя для __asm__
и доступно в режиме GNU C, который является значением по умолчанию (-std=gnu99
/ -std=gnu11
или любым другим).
Существует абсолютно нулевая разница в поведении.Некоторые участники Linux предпочитали __asm__
, в то время как другие использовали asm
.Linux скомпилирован с -std=gnu99
или gnu11
, потому что определенно зависит от расширений GNU до C.
Я не думаю, что какое-либо из этих вхождений было в заголовке, который можно было бы включитьв другом месте, за пределами Linux.__asm__
не неправильно в коде GNU C.Но если вам нужен код для работы даже при компиляции с -std=c11
, то asm
неверен.
Только ключевое слово MSVC __asm
отличается и использует __asm { insn; insn; }
и не поддерживаетсяпо основной линии(Gcc от Apple для более старой OS X, использующей серверную часть LLVM, поддерживает -fasm-blocks
, как и текущий Clang.)