gpt4 book ai didi

c - 变量声明问题

转载 作者:行者123 更新时间:2023-12-04 10:58:53 27 4
gpt4 key购买 nike

我的代码中有以下声明:

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

这告诉我它正在尝试将属性应用于两个变量。我将以它不会因属性类型而异的想法运行。

最佳答案

volatile 限定符是整个声明的公共(public)部分。 * 是单个声明符的一部分。所以

u32 volatile *A, *B;

相当于

u32 volatile *A;
u32 volatile *B;

这是语言规范所说的。

但是,__attribute__ 不是语言的一部分,这意味着您必须查阅编译器文档才能弄清楚它的行为方式。

关于c - 变量声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com