使用 gcc 在 C 中使用多个 __attribu__

发布于 2024-10-30 15:11:20 字数 271 浏览 0 评论 0原文

能否使用 gcc 在 C 语言中向标识符添加多个属性? 这是我现在所拥有的。我省略了包含语句,因为它们在帖子中变得混乱。 如果有办法将两个相加,一般语法是什么,以及如何使用定义和原型来完成它?谢谢。 :-)

main() {  
    printf("In Main\n");  
}  
__attribute__ ((constructor)) void beforeMain(void)  
{  
    printf("Before Main\n");  
}  

Can you add more than one attribute to an identifier in C with gcc?
Here is what I have now. I left out the include statements because they get scramble in the post.
If there is a way to add two, what is the general syntax, and how can I do it both with the defintion, and with a prototype? Thank you. :-)

main() {  
    printf("In Main\n");  
}  
__attribute__ ((constructor)) void beforeMain(void)  
{  
    printf("Before Main\n");  
}  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

行至春深 2024-11-06 15:11:20

使用 GCC 在 C 中指定多个属性有两种不同的方法:

#include <stdio.h>

// Attributes in prototypes:
__attribute__((constructor, weak)) void beforeMain(void);
__attribute__((constructor)) __attribute__((weak)) void beforeMain2(void);

int main(){
    printf("In Main\n");
    return 0;
}

// Attributes in definitions:
__attribute__((constructor, weak)) void beforeMain(void){
    printf("Before Main 1\n");
}

__attribute__((constructor)) __attribute__((weak)) void beforeMain2(void){
    printf("Before Main 2\n");
}

上面的代码在 GCC 版本 4.4.3 和 12.3.0 下可以正确编译和运行。

There are two different ways of specifying multiple attributes in C with GCC:

#include <stdio.h>

// Attributes in prototypes:
__attribute__((constructor, weak)) void beforeMain(void);
__attribute__((constructor)) __attribute__((weak)) void beforeMain2(void);

int main(){
    printf("In Main\n");
    return 0;
}

// Attributes in definitions:
__attribute__((constructor, weak)) void beforeMain(void){
    printf("Before Main 1\n");
}

__attribute__((constructor)) __attribute__((weak)) void beforeMain2(void){
    printf("Before Main 2\n");
}

The code above compiles and runs correctly for me under GCC versions 4.4.3 and 12.3.0.

游魂 2024-11-06 15:11:20

您可以使用多个 __attribute__ 说明符,并用空格分隔。

char s[3] __attribute__((aligned(32))) __attribute__((weak));

You can use multiple __attribute__ specifiers separated by spaces.

char s[3] __attribute__((aligned(32))) __attribute__((weak));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文