- Я не знал, что мы можем использовать объединения и структуры внутри операторов #define.Как они интерпретируются компилятором?
Определить операторы - это просто макросы.Они НЕ интерпретируются компилятором, а препроцессором.Этот бит кода, который определен внутри макроса, просто вставляется копированием везде, где вы вызываете / используете этот макрос.Если он содержит допустимый код C / C ++, то он будет скомпилирован и на следующем шаге, как только препроцессор будет готов.
Что означают "name ## _ L" и "name ## L".?, Особенно "##".
Да, меня это удивило ##
когда-то тоже.Это объединение токенов.По сути, вы можете генерировать «программно» имена переменных / функций, используя его.Так, например, у вас есть,
#include <stdio.h>
#define concat(a, b) a##b
int main(void)
{
int foobar = 1;
printf("%d", concat(foo, bar));
return 0;
}
будет печатать 1
, поскольку объединяет foo
и bar
вместе, чтобы сформировать foobar
.
Что такое "__ACCESS_20BIT_REG__ name
"?
__ACCESS_20BIT_REG__
, по-видимому, определяемый реализацией макрос , определенный, вероятно, где-то еще в коде.Двойное подчеркивание __
, за которым следует заглавная буква, зарезервировано для реализации (так что они могут использоваться, например, вашим производителем ОК).
Что это за новый символ "@", я гуглил, чтобы узнать об этом символе, и я нигде не нахожу ничего, связанного с символом @, некоторые люди говорят, что это не стандарт С, это правда? И чтоэто значит?
Этот тоже меня озадачил.Я не думаю, что это законно C.
РЕДАКТИРОВАТЬ:
На самом деле, что касается вашего пункта 4, то есть @
символ, я погуглил еще немного и нашел это stackoverflow вопрос .