我在我的代码如下声明:变量声明的问题
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 kernel code中,它们的用法与我想要的类似。这是代码错误吗?
最后一个更新,如果我用下面的代码:
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
这是说,我认为它试图以应用属性到两个变量。我将运行它的想法,它不会改变属性类型。
我不知道那是否意味着其他读代码的人可能不会。为什么不只是长时间打字并摆脱歧义。 – 2010-09-17 17:15:39
或使用typedef ... – 2010-09-17 17:18:30
@Paul R - 你可以在'typedef'中使用'__attribute__'吗? – detly 2010-09-17 17:26:09