2015-03-25 7 views
0

Я играл с cdecl, и я заметил, что некоторые имена не разрешены в качестве идентификаторов, хотя GCC их компилирует.Каковы имена переменных, которые запрещены в cdecl, отличные от тех, которые не могут использоваться в какой-либо программе?

Например, если я пишу

INT PTR;

или

INT указатель;

или

целочисленный массив;

cdecl дает «синтаксическую ошибку», но когда я использую его в программе, GCC компилирует их без каких-либо проблем. Таким образом, есть некоторые идентификаторы, которые не разрешены в cdecl.

Каковы идентификаторы, которые нельзя использовать в cdecl, но могут использоваться в программе (т. Е. Компиляция программы)? Почему они не разрешены?

+0

Попробовал ли вы посмотреть на его [исходный код] (http://cdecl.org/files/cdecl-blocks-2.5.tar.gz), чтобы узнать, как он интерпретирует такие идентификаторы? –

+0

@RemyLebeau, Исходный код слишком велик. Его очень трудно читать и понимать. –

ответ

1

pointer и array находятся в списке Cdecl в зарезервированных ключевых слов:

char *keywords[] = { 
    "function", 
    "returning", 
    "array",  // <-- 
    "pointer", // <-- 
    "reference", 
    "member", 
    "const", 
    "volatile", 
    "noalias", 
    "struct", 
    "union", 
    "enum", 
    "class", 
    "extern", 
    "static", 
    "auto", 
    "register", 
    "short", 
    "long", 
    "signed", 
    "unsigned", 
    "char", 
    "float", 
    "double", 
    "void", 
    NULL 
}; 

Что касается ptr, я не знаю, почему Cdecl считает, что является недопустимым. Ввод следующее выражение в Cdecl также не:

объявить PTR, как INT

Но это работает:

объявлять ptr1, как INT

так ясно, что не как ptr, либо.

+0

'' return "' тоже не допускается ?? Никогда не думал об этом ... –

+1

'' return "' разрешено, если вы вводите текст на английском языке для перевода в код, например: 'function return int' переводит на' int f() '. Поэтому имеет смысл использовать '' указатель '' и '' array'', так как они также используются в тексте на английском языке. Но '' ptr'''? О, подождите, я просто попробовал «объявить foo как массив 5 из ptr для int», и он переводится на 'int * foo [5]', поэтому я думаю, cdecl рассматривает '' ptr "' как псевдоним для указателя '' '. –

+0

Это имеет смысл. Пожалуйста, добавьте это в свой ответ. –

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

  • Нет связанных вопросов^_^