2015-02-18 4 views
3

Мы разрабатываем код для встроенных архитектур PowerPC.Является ли «asm Macro» частью стандарта C?

Наш компилятор поддерживает так называемые макросы asm.

Вот выдержка из справочника:

ASM Macro Синтаксис

определение макроса ASM выглядит как определение функции, в том числе типа возвращаемого значения и списка параметров и тела функции.

синтаксис:

asm [volatile] [return-type] macro-name ([ parameter-list ]) 
{ 
% storage-mode-list (must start in column 1) 
! register-list  (“!” must be first non-whitespace) 
    asm-code  
} (must start in column 1 

Это стандарт C? Мой компилятор не перечисляет это как расширение в своем справочнике.

Разъяснение после первого ответа:

Я знаю часть withen { } не определяется стандартом C. Я имел в виду функцию, как конструкт после asm и перед закрытием ).

+1

См. Http://stackoverflow.com/questions/13870489/is-inline-asm-part-of-the-ansi-c-standard –

ответ

4

Нет, это не стандарт C. Все, что связано с архитектурой, подобно ассемблеру, скорее всего будет расширением для реализации по определению.

+1

О, извините, может быть, я должен был сформулировать это более точно. Я знаю, что часть внутри '{ассемблер или аналогичный}' не определяется стандартным C. Я имел в виду всю конструкцию, подобную функции. – RedX

+0

Нет, в этом нет ничего общего. –

0

asm ключевое слово не является стандартом в C, он зарезервирован в C++, но в обоих случаях синтаксис конкретной реализации, как описано here:

ASM-декларации дает возможность встраивать в сборе исходный код языка в программе на C++. Это объявление условно поддерживается, а реализация определена, что означает, что он может отсутствовать и даже если он обеспечивается реализацией, он не имеет фиксированного значения.

Это использование, чтобы определить макрос, новый для меня и интересный, однако.

+0

Синтаксис не реализован в C++. Стандарт (C++ 03 7.4) определяет фактический синтаксис для inline asm как 'asm" NOP ";' и ничего другого. Часть, определяемая реализацией, представляет собой только фактическую сборку внутри кавычек, в данном случае инструкцию NOP. – Lundin

+0

@ Lundin: Хороший момент, хотя этот определенный синтаксис не охватывает синтаксис в вопросе или синтаксис спецификации ввода/вывода/clobber в GCC, а в историческом плане мало стандартизации - ожидать, что компиляторы меняются, это мой совет. VC++ использует другой синтаксис, введенный '__asm', что является более правильной формой для нестандартных расширений компилятора. – Clifford

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