#c
#c
Вопрос:
У меня возникла эта путаница, когда я работал над преобразованием инфикса в префикс, используя выражение инфикса C: A-B (N $ N)(O P) Q / R ^ S T Z
где я обнаружил, что $ используется в качестве оператора.
Итак, чтобы развеять мои сомнения, я создал программу, выполняющую операцию $ b на C, чтобы посмотреть, дает ли она результаты, подобные другим операторам, но ответа не увидел. Результат еще больше усилил мои сомнения относительно оператора $ и его использования в C.
Если a = 5, b = 6, то, если мы выполним a b и выведем сумму, мы получим 11. В случае $ if мы рассматриваем его как оператор и выполняем $ b, тогда я не получаю никакого результата. Итак, я был смущен тем, является ли $ оператором или нет в случае C
Комментарии:
1. Это не оператор C.
2. где я обнаружил, что $ используется в качестве оператора. — объясните это.
3. Пожалуйста, покажите полную, работоспособную программу, которую вы запускали в качестве теста.
4. Я чувствую запах Хаскелла.
5.
I ran a program a$b in C
Было ли имя программыa$b
, и что означает » ran … в C » точно означает?
Ответ №1:
Некоторые компиляторы (включая GCC) принимают в качестве расширения языка C a $
внутри идентификатора. Вам также может понадобиться поддержка от вашего компоновщика и ассемблера.
Но стандартный C обычно запрещает это. Прочитайте, например, Современный C, чтобы узнать больше, а также проект стандарта n2176. Проверьте также этот справочный веб-сайт C (кажется, $
это разрешено в последних стандартах C).
IIRC, на компьютерах VAX под виртуальными машинами у вас было много системных идентификаторов с a $
.
Я думаю, вы могли бы улучшить какой-нибудь компилятор C с открытым исходным кодом (не только GCC, но и Clang, tinycc, nwcc …), Чтобы принять $
его в качестве некоторого оператора.
Моя рекомендация заключалась бы в том, чтобы не использовать $
ваши идентификаторы и черпать вдохновение из существующего программного обеспечения с открытым исходным кодом (например, GTK).
Например, следующий /tmp/dollar.c
файл
#include <stdio.h>
int main(int argc, char**argv)
{
int doll$ar = 2;
printf("from %s doll$ar is %d and argc is %dn",
argv[0], doll$ar, argc);
}
использование GCC 10 в Linux / x86-64 в декабре 2020 года as gcc -Wall -Wextra /tmp/dollar.c -o /tmp/dollar
компилируется без предупреждений. Когда я запускаю /tmp/dollar
вывод:
from /tmp/dollar doll$ar is 2 and argc is 1
Немногие программы с открытым исходным кодом (посмотрите на исходный код GNU make или GNU bash) используют $
идентификаторы in .
PS. Я считаю, что будущие стандарты могут допускать использование букв UTF-8 в идентификаторах, но вам нужно проконсультироваться с вашим представителем ISO.
Комментарии:
1. Стандарт C допускает символы Unicode в идентификаторах по крайней мере с 1999 года, а также явно разрешает символы, определенные реализацией.