В моем коде есть следующее объявление:
u32 volatile __attribute__((nocast)) *A, *B;
Это эквивалентно:
u32 volatile __attribute__((nocast)) *A;
u32 volatile __attribute__((nocast)) *B;
или
u32 volatile __attribute__((nocast)) *A;
u32 volatile *B;
или даже:
u32 volatile __attribute__((nocast)) *A;
u32 *B;
Небольшое обновление для этого. Это код ядра Linux, поэтому единственный возможный компилятор - это gcc. Я знаю, что, возможно, в конечном итоге я напишу это в несколько строк, но мне любопытно.
Например, в следующем коде ядра Linux они используют его так же, как я хотел. Этот код глючит?
Одно окончательное обновление, если я использую следующий код:
int main() {
int __attribute__((weak)) a, b;
}
В gcc я получаю следующие предупреждения:
foo.c: In function ‘main’:
foo.c:5: error: weak declaration of ‘a’ must be public
foo.c:5: error: weak declaration of ‘b’ must be public
Это говорит мне, что он пытается применить атрибут к обеим переменным. Я собираюсь придерживаться идеи, что это не зависит от типов атрибутов.