LINUX.ORG.RU

C++ и ключевые слова


0

0

Описаны ли ключевые слова для компилятора в стандарте,
и разрешено (а не возможно!) ли использование компиляторами
своих ключевых слов?

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

anonymous

> Описаны ли ключевые слова для компилятора в стандарте,

ессно что да:

---cut---
2.11 Keywords [lex.key]

1. The identifiers shown in Table 3 are reserved for use as keywords (that is, they are unconditionally treated as keywords in phase 7):

Table 3—keywords

asm do if return typedef
auto double inline short typeid
bool dynamic_cast int signed typename
break else long sizeof union
case enum mutable static unsigned
catch explicit namespace static_cast using
char export new struct virtual
class extern operator switch void
const false private template volatile
const_cast float protected this wchar_t
continue for public throw while
default friend register true
delete goto reinterpret_cast try

2. Furthermore, the alternative representations shown in Table 4 for certain operators and punctuators (2.5) are reserved and shall not be used otherwise:

Table 4—alternative representations

and and_eq bitand bitor compl not
not_eq or or_eq xor xor_eq
---cut---

> и разрешено (а не возможно!) ли использование компиляторами своих ключевых слов? недавно просто собирал одним компилятором, и оказалось что имя переменной которую я использую - ключевое слово.

в этом свете ясен пень что нет, на то они и ключевые.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

Т.е. например все версии VC++ не соотвествуют стандарту: у них по крайней мере есть ключевое слово "near",

у борладовских компилятор есть __try и т.д.

anonymous
()
Ответ на: комментарий от anonymous

> Т.е. например все версии VC++ не соотвествуют стандарту: у них по крайней мере есть ключевое слово "near", у борладовских компилятор есть __try и т.д.

а это уже расширения, не входящие в стандарт. у gcc таких плюшек то-же хватает. впрочем, как и у любого другого компилятора.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

> Т.е. например все версии VC++ не соотвествуют стандарту: у них по крайней мере есть ключевое слово "near",

под рукой нет MSVC, но не удивлюсь, если там near определён как

#define near __near

или в этом духе

> у борладовских компилятор есть __try и т.д.

схема именование субъектов с двумя подчерками в начале - это вотчина компилятора и крайне не рекоммендуется к использованию прикладным ПО -> объявляя "int __foo" вы сознательно рискуете рано или поздно напороться на конфликт -> ССЗБ :)

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

А __try - это случаем не оффтопик-structured-exception-handling? ИМХО на всех оффтопиковых компиляторах есть доступ к SEH.

omerm
()
Ответ на: комментарий от klalafuda

> схема именование субъектов с двумя подчерками в начале - это вотчина компилятора и крайне не рекоммендуется к использованию прикладным ПО

а также один подчерк со следующей за ней заглавной буквой -- будущие редакции стандарта могут сделать из него ключевое слово. Например в С99 появилась _Pragma

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.