#c
#c
Вопрос:
Я читал, что существуют лексические константы, лексические операторы, лексическая область видимости и т.д. как термин «лексический» изменяет значение константы, например, строкового литерала, для любого оператора или области видимости некоторого идентификатора?
Ответ №1:
«лексический» означает, что он связан с исходным кодом.
Например, 1
является лексической константой. OTOH, sizeof(char)
также является выражением интегральной константы во время компиляции, но это не лексическая константа. Лексически это вызов sizeof
оператора.
Лексические операторы работают с исходным кодом. Операторы препроцессора попадают в эту категорию.
В большинстве случаев не имеет значения, использую ли я 1
или sizeof(char)
где-либо еще в моей программе. Но в качестве аргумента лексических операторов #
или ##
это имеет существенное значение, потому что они работают с фактическим кодом, а не с результатом вычисления:
#define STR(x) #x
std::string one = STR(1);
std::string also_one = STR(sizeof(char));
Наконец, лексическая область видимости означает часть исходного кода программы, где существует идентификатор are (распознан, может быть использован). Это в отличие от динамической области видимости, также известной как время существования объекта, которая является частью программы, где существует объект (сохраняет свое значение и может управляться косвенно с помощью указателя или ссылки, даже если имя не входит в лексическую область видимости).
string f(string x) { return "2" x; } // main's "y" is not in lexical scope, however it is in dynamic scope, and will not be destroyed yet
int main(void)
{
string y = "5.2"; // y enters lexical scope and dynamic scope
string z = f("y"); // y leaves lexical scope as f is called, and comes back into lexical scope when f returns
return z.size();
// z leaves lexical and dynamic scope, destructor is called
}
Ответ №2:
использование термина «лексическая константа» не подразумевает другого вида константы.
Обычно, когда вы говорите о грамматике C , вы будете использовать термины «лексический это», «лексический то». В отличие от наличия констант, хранящихся в объектах, и области видимости файла или оператора в матрице.
Итак, если я говорю о строке кода, которая имеет константу типа: (32786)
Я могу использовать слово lexical (возможно, без необходимости), чтобы подтвердить значение того, что число существует только как токен C .
Итак, когда я говорю о токенах C и их взаимосвязях, я использую слово «лексический», как это делает википедия.