Weak & Strong Alias(强弱别名)
来源:互联网 发布:c 语言 多线程共享数据 编辑:程序博客网 时间:2024/06/03 18:00
语句原型:void smc_timing_init(int cs) __attribute__((weak, alias("_smc_timing_init")));
总结:_smc_timing_init是smc_timing_init的别名,具有弱属性。当smc_timing_init未定义,调用smc_timing_init时执行_smc_timing_init。当smc_timing_init已定义,调用smc_timing_init时执行smc_timing_init,屏蔽_smc_timing_init。
注意:smc_timing_init和_smc_timing_init不能放在同一个文件中。
weak.c
#include <stdio.h>
void smc_timing_init(int cs) __attribute__((weak, alias("_smc_timing_init")));
void _smc_timing_init(int cs)
{
int i = 1;
i = i+cs;
printf("_smc_timing_init:%d\n", i);
}
strong.c
#include <stdio.h>
void smc_timing_init(int cs)
{
int i = 0;
i = i+cs;
printf("smc_timing_init:%d\n", i);
}
main.c
#include <stdio.h>
int main()
{
smc_timing_init(1);
_smc_timing_init(1);
return 0;
}
makefile
objects = main.o weak.o
main : $(objects)
cc -o main $(objects)
.PHONY : clean
clean :
-rm main $(objects)
执行结果:
_smc_timing_init:2
_smc_timing_init:2
makefile
objects = main.o weak.o strong.o
main : $(objects)
cc -o main $(objects)
.PHONY : clean
clean :
-rm main $(objects)
执行结果:
smc_timing_init:1
_smc_timing_init:2
最新的makefile
VPATH = ../weak\
../strong
OBJ_DIR = ../bin
RELEASE_DIR = ../release
objects = main.o weak.o strong.o
main : $(objects)
cc -o main $(objects)
mv main.o strong.o weak.o $(OBJ_DIR)
mv main $(RELEASE_DIR)
.PHONY : clean
clean :
-rm $(RELEASE_DIR)/main $(foreach VAR,$(objects),$(OBJ_DIR)/$(VAR))
字节对齐:
#pragma pack(1) /* 将地址对齐界线改为1的整数倍 */
struct my_struct {
char ch1;
char ch2;
int n;
char ch3;
}; /* 整个结构体占据7个字节 */
#pragma pack()
GNU C支持结构体的扩展属性。
struct my_struct {
char ch1;
char ch2;
int n;
char ch3;
} __attribute__ ((packed)); /* 指明此结构是“紧凑”的,占据7个字节 */
总结:_smc_timing_init是smc_timing_init的别名,具有弱属性。当smc_timing_init未定义,调用smc_timing_init时执行_smc_timing_init。当smc_timing_init已定义,调用smc_timing_init时执行smc_timing_init,屏蔽_smc_timing_init。
注意:smc_timing_init和_smc_timing_init不能放在同一个文件中。
weak.c
#include <stdio.h>
void smc_timing_init(int cs) __attribute__((weak, alias("_smc_timing_init")));
void _smc_timing_init(int cs)
{
int i = 1;
i = i+cs;
printf("_smc_timing_init:%d\n", i);
}
strong.c
#include <stdio.h>
void smc_timing_init(int cs)
{
int i = 0;
i = i+cs;
printf("smc_timing_init:%d\n", i);
}
main.c
#include <stdio.h>
int main()
{
smc_timing_init(1);
_smc_timing_init(1);
return 0;
}
makefile
objects = main.o weak.o
main : $(objects)
cc -o main $(objects)
.PHONY : clean
clean :
-rm main $(objects)
执行结果:
_smc_timing_init:2
_smc_timing_init:2
makefile
objects = main.o weak.o strong.o
main : $(objects)
cc -o main $(objects)
.PHONY : clean
clean :
-rm main $(objects)
执行结果:
smc_timing_init:1
_smc_timing_init:2
最新的makefile
VPATH = ../weak\
../strong
OBJ_DIR = ../bin
RELEASE_DIR = ../release
objects = main.o weak.o strong.o
main : $(objects)
cc -o main $(objects)
mv main.o strong.o weak.o $(OBJ_DIR)
mv main $(RELEASE_DIR)
.PHONY : clean
clean :
-rm $(RELEASE_DIR)/main $(foreach VAR,$(objects),$(OBJ_DIR)/$(VAR))
字节对齐:
#pragma pack(1) /* 将地址对齐界线改为1的整数倍 */
struct my_struct {
char ch1;
char ch2;
int n;
char ch3;
}; /* 整个结构体占据7个字节 */
#pragma pack()
GNU C支持结构体的扩展属性。
struct my_struct {
char ch1;
char ch2;
int n;
char ch3;
} __attribute__ ((packed)); /* 指明此结构是“紧凑”的,占据7个字节 */
0 0
- Weak & Strong Alias(强弱别名)
- 关于强弱引用的问题 strong,weak,assign
- SQL Alias(别名)
- SQL Alias(别名)
- SQL Alias(别名)
- 别名(Alias)
- SQL Alias(别名)
- MySQL 表别名(Alias)
- ubuntu定义别名(alias)
- MySQL 表别名(Alias)
- Weak Alias
- weak alias
- weak alias
- weak alias
- strong weak
- Weak-Strong
- Alias 别名
- 别名--alias
- IEnumerable vs IQueryable
- 内部类--毕向东Java基础教程学习笔记
- 管理类书籍读后感(散落在外的那些)
- 初学多线程练习1--电子时钟
- MySQL中删除重复数据只保留一条
- Weak & Strong Alias(强弱别名)
- js组合继承(原型链+对象冒充)
- 简单的Windows登陆界面设计
- 我常用的计划安排表
- 将切片地图服务导出成移动端TPK包的操作说明
- 匿名内部类--毕向东java基础教程学习笔记
- Process Explorer查找占用文件(或文件夹)的进程
- linux_raid
- 终止线程执行的两种方法