Size: a a a

2020 August 08

VS

Vlad Serebrennikov in supapro.cxx
std::slavik
зарезервированы это означает что компилятор может предопределить их и мне не говорить об этом
«зарезервированы» значит, что тебе запрещено иметь такие идентификаторы, и компилятор не обязан это диагностировать
источник

VS

Vlad Serebrennikov in supapro.cxx
раз в стандарте написано no diagnostics required, значит, нет надежного способа диагностировать нарушение этого требования
источник

VS

Vlad Serebrennikov in supapro.cxx
или он пока не найден
источник

s

std::slavik in supapro.cxx
Vlad Serebrennikov
«зарезервированы» значит, что тебе запрещено иметь такие идентификаторы, и компилятор не обязан это диагностировать
запрещено и UB - разные вещи
источник

s

std::slavik in supapro.cxx
поведение будет определенным
источник

s

std::slavik in supapro.cxx
и определяться дефайнами
источник

s

std::slavik in supapro.cxx
то что это не то что ты ожидаешь не делает это UB
источник

VS

Vlad Serebrennikov in supapro.cxx
std::slavik
запрещено и UB - разные вещи
запрещено значит, что стандарт не описывает поведение программ, которые не соблюдают этот запрет
источник

VS

Vlad Serebrennikov in supapro.cxx
внезапно очень похоже на undefined behavior, не правда ли?
источник

s

std::slavik in supapro.cxx
неопределенное поведение это например переполнение стека
источник

s

std::slavik in supapro.cxx
на винде тебе вылетит segmentation fault
источник

VS

Vlad Serebrennikov in supapro.cxx
std::slavik
неопределенное поведение это например переполнение стека
стека в стандарте не существует, правда
источник

s

std::slavik in supapro.cxx
а на bare metal ниче не вылетит
источник

s

std::slavik in supapro.cxx
просто будет писать в другой сегмент
источник

s

std::slavik in supapro.cxx
это не определяется стандартом
источник

s

std::slavik in supapro.cxx
поэтому и называется неопределенным поведением
источник

s

std::slavik in supapro.cxx
то что ты используешь в своей программе используемые компиляторами дефайны - не делает его неопределенным
источник

VS

Vlad Serebrennikov in supapro.cxx
If a program contains a violation of a rule for which no diagnostic is required, this document places no requirement on implementations with respect to that program.
источник

s

std::slavik in supapro.cxx
#if defined ( __CC_ARM )     /* Keil */
   #define CODESECT AREA     ||.text||, CODE, READONLY, ALIGN=2
   #define LABEL
#elif defined ( __GNUC__ )     /* GCC */
   #define THUMB .thumb
   #define CODESECT .section .text
   #define EXPORT .global
   #define PROC :
   #define LABEL :
   #define ENDP
   #define END

   .syntax unified
#elif defined ( __IASMARM__ )  /* IAR */
   #define CODESECT SECTION `.text`:CODE
   #define PROC
   #define LABEL
   #define ENDP
   #define EXPORT PUBLIC
#elif defined ( __CSMC__ )     /* Cosmic */
 #define  CODESECT  switch .text
 #define THUMB
 #define EXPORT  xdef
 #define PROC  :
 #define LABEL  :
 #define ENDP
 #define arm_bitreversal_32 _arm_bitreversal_32
#elif defined ( __TI_ARM__ )   /* TI ARM */
   #define THUMB    .thumb
   #define CODESECT .text
   #define EXPORT   .global
   #define PROC     : .asmfunc
   #define LABEL    :
   #define ENDP     .endasmfunc
   #define END
#endif

 CODESECT
 THUMB
источник

s

std::slavik in supapro.cxx
вот например ассемблерный файл из third party библиотеки которую я к проекту подключаю
источник