#pragma weak
来源:互联网 发布:一键安装java环境 编辑:程序博客网 时间:2024/06/14 11:22
采用 #pragma weak name 形式时,指令使 name 成为弱符号。链接程序没有找到 name 的符号定义时,不会显示错误消息,也不会出现符号的多个弱定义的错误消息。链接程序仅执行第一个遇到的定义。
如果另一个编译单元有函数或变量的强定义,那么 name 将链接到它。如果没有 name 的强定义,那么链接程序符号的值为 0。
Example1
编译单元A cu1.c
#include <stdio.h>
extern int foo;
#pragma weak foo
int main() {
int *ptr;
ptr = &foo;
if (ptr == 0) {
printf("foo has not been defined/n");
} else {
printf("foo was already defined as %d/n", foo);
}
}
编译单元B cu2.c
int foo = 1;
只编译单元A:gcc cu1.c && ./a.out ,执行if语句。
编译两个单元:gcc cu1.c cu2.c && ./a.out ,执行else语句。
Example2
cu3.c
#include <stdio.h>
extern void foo(void);
#pragma weak foo
int main() {
if (foo != NULL) {
foo();
} else {
rintf("foo has not been defined/n");
}
}
编译 gcc cu3.c && ./a.out ,提示foo未被定义。
Example3
编译单元A cu4.c
#include <stdio.h>
extern void foo(void);
void foo1(void) {
printf("Just in function foo1()/n");
}
#pragma weak foo = foo1
int main() {
foo();
}
编译单元B cu5.c
#include <stdio.h>void foo(void) { printf("In function foo()/n");}
只编译单元A:gcc cu4.c && ./a.out ,执行foo1。
编译两个单元:gcc cu4.c cu5.c && ./a.out ,执行foo。
0 0
- #pragma weak
- weak
- -weak
- #pragma
- Pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- IOS中的几种比较常见的延时方法的介绍及各自优缺点
- SCOI2003【严格n元树】
- Android gradle配置
- 【vijos】P1911 珠心算测验
- ios常用的语法大全
- #pragma weak
- PIC C语言编程_PICC中变量修饰关键词
- 去除多余cell的线
- c 字符串函数
- 提取身份证中的年龄和性别
- 生活的心态---扯淡篇
- App Annie 的数据涞源分析
- 数据库中触发器的使用
- How Broswers Work<二>渲染引擎(2)--解析的一般过程