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个字节 */
0 0
原创粉丝点击