Значит ли символ (@) и знак доллара ($) имеет какое-либо особое значение в C или С++

Недавно один из моих знакомых столкнулся с этим вопросом в интервью. Интервьюер спросил его, имеют ли специальные символы, такие как $, @, |, ^, ~, использование в c или С++ и где.

Я знаю, что |, ^ and ~ используются как Побитовые ИЛИ, XOR и Дополнение соответственно.

Но я не знаю, имеет ли @ and $ какое-либо особое значение. Если да, не могли бы вы привести пример, где он может быть применен?

Ответ 1

@ обычно недействителен в C; он не используется ни для чего. Он используется для различных целей Objective-C, но это целый другой чайник рыбы.

$ также недопустим, но многие реализации позволяют ему отображаться в идентификаторах, как буква. (В этих реализациях, например, вы могли бы назвать переменную или функцию $$$, если хотите.) Даже там, однако, это не имеет особого значения.

Ответ 2

Чтобы выполнить принятый ответ, @ можно использовать для указания абсолютного адреса переменной на встроенных системах.

unsigned char buf[128]@0x2000;

Обратите внимание, что это нестандартное расширение компилятора.

Ознакомьтесь с хорошим объяснением здесь

Ответ 3

Чтобы выполнить другие ответы. Стандарт C99 в 5.2.1.3:

Оба базовых набора символов основного и основного исполнений должны иметь следующие участники:

26 заглавных букв латинского алфавита

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

26 строчных букв латинского алфавита

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

10 десятичных цифр

0 1 2 3 4 5 6 7 8 9

следующие 29 графических символов

! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~

Все остальные символы, возможно, даже не существуют. (И не следует использовать)

Но есть и эта точка в общих расширениях: Приложение J, J.5.2:

Символы, отличные от подчеркивания _, букв и цифр, которые не являются частью основного исходный набор символов (например, знак доллара $или символы в национальных наборах символов) может отображаться в идентификаторе (6.4.2).

В основном это то, что уже написал duskwuff.