Является ли inline asm частью стандарта ANSI C?

Я всегда думал, что это так, но многие IDE и инструменты подсветки синтаксиса не выделяют ASM в C, но они всегда делают с C ++. Является ли встроенная сборка частью стандарта C (ANSII или ISO) или нет?

8

Решение

Это не входит в стандарт ISO C (проект N1570 C2011) как таковой, но упоминается в приложении J (общие расширения):

J.5.10 Ключевое слово asm

1 Ключевое слово asm может использоваться для вставки ассемблера непосредственно в вывод транслятора (6.8). Наиболее распространенной реализацией является утверждение в форме:

asm ( character-string-literal );

Приложение J является информативным, а не нормативным, поэтому реализация не должна предусматривать встроенную сборку, и, если это происходит, не указано, в какой форме. Но это широко распространенное расширение, хотя и не переносимое, поскольку компиляторы действительно реализуют его по-разному.

В стандарте C ++ (черновой вариант стандарта C ++ 11 n3376) он упоминается в основной части стандарта.

7.4. Объявление asm [Dcl.asm]

1 ASM декларация имеет вид

ASM-определение:

asm ( string-literal ) ;

Объявление asm условно поддерживается; его значение определяется реализацией. [Примечание: как правило,
он используется для передачи информации через реализацию ассемблеру. — конец примечания]

но также не обязательно, и с интерпретацией, определенной реализацией.

16

Другие решения

Вопреки распространенному мнению, asm является в собственно стандарте C ++, но его поддержка носит условный характер. §7.4 / 1:

ASM декларация имеет вид

ASM-определение:

asm ( string-literal ) ;

Объявление asm условно поддерживается; его смысл — реализация
определены.

Тем не менее, «условно поддерживаемый» означает, что вы не можете зависеть от конкретного компилятора, поддерживающего это вообще. Microsoft (для одного очевидного примера) использует _asm вместо ключевого слова, но с совершенно другим синтаксисом (язык ассемблера заключен в фигурные скобки вместо строкового литерала).

4

Нет — встроенный asm является распространенным расширением, но нестандартным (и довольно часто реализуемым по-разному разными поставщиками).

1
По вопросам рекламы [email protected]