#pragma weak

2024-05-05 07:32
文章标签 pragma weak

本文主要是介绍#pragma weak,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采用 #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。




这篇关于#pragma weak的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961128

相关文章

if !defined与pragma once

两者的共同点都是为了避免同一个文件被include多次,但是各有千秋。 在用VC6.0向导生成的头文件中,经常可以看见如下的代码段:  #if !defined(AFX_RESIZABLELAYOUT_H__INCLUDED_)  #define AFX_RESIZABLELAYOUT_H__INCLUDED_  #if _MSC_VER > 1000  #pragma once  #e

C++-标准库 weak_ptr

文章目录 概述构建cyclic reference例子 概述 shared_ptr的作用主要是在最后一个指向资源的shared_ptr销毁时自动释放资源,然而在某些场景下这种行为可能不被期望。例如: 两个或者多个对象都使用shared_ptr,并且相互通过shared_ptr指向对方,如果存在一个环路(cyclic reference),那么由于环路上的shared_ptr的u

#pragma   warning(push)

#pragma   warning(push)是保存当前的编译器警告状态; #pragma   warning(pop)是恢复原先的警告状态。 例如: #pragma   warning(   push   ) #pragma   warning(   disable   :   4705   ) #pragma   warning(   disable   :   4706   ) #pragm

[4 使用C++11解决内存泄漏问题] 4.1 shared_ptr / 4.2 unique_ptr / 4.3 weak_ptr

智能指针是存储指向动态分配(堆内存)对象指针的类。 通用实现技术是使用引用计数。每使用它一次,引用计数加1,每析构一次,引用计数减1,减为0时,删除所指向的堆内存。 C++11提供三种智能指针,std::shared_ptr,std::unique_prt和std::weak_ptr。需引用头文件。 4.1 shared_ptr共享的智能指针 shared_ptr使用引用计数,每一个s

浅析objective-c中的strong和weak

在才开始学习oc时,搞不懂什么时候用strong,什么时候用weak,经过一段时间的学习,我谈谈我对strong和weak的理解。 首先strong和weak这两个关键字是用来修饰变量,表示这个变量是强(strong)引用和弱(weak)引用 我们在程序中经常会用到“[[class alloc]init]” 这样的代码,我想你对它已经很熟。这是在开辟一块内存,并初始化。那么系统开辟了这块内

C++ #pragma pack(n)

一、#pragma简介         #pragma是预处理指令的一种,它的作用是设定编译器的状态、指定编译器完成特定任务。                 (预处理阶段:在编译阶段之前进行)         #pragma相当于是由各个厂商开发扩展的,因此可能因编译器或操作系统不同而有所差异。         (以上的意思是:不是所有编译器都一定能用所有的#pragma) 二、#pr

#pragma once的作用

今天打开vs2015创建一个.h文件,结果创建好之后里面直接有一个#pragma once,这在之前的vs版本中没见过。猜测应该就是避免头文件多次include的问题。查阅百度百科百度百科的解释链接之后记录如下: 作用:为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。 在能够支持这两种方式的编译器上,二者并没有太大的

association weak 属性

association weak 属性 当给类添加分类添加属性时,我们一般使用关联对象来实现 管理关联对象的方法: objc_setAssociatedObject(id object, void * key, id value, <objc_AssociationPolicy policy) 以给定的key为对象设置关联对象的value objc_getAssociatedObject(i

Xcode7.3g更新后__weak错误解决方法

解决方法 Xcode更新后,使用__weak会提示 经查询发现解决方法 具体步骤 工程 – build Setting -> 搜MRR将搜索结果(Manual Retain Release) 改成 Yes 即可

【darknet】源码阅读理解(四)——#pragma omp parallel for

参考自:https://www.cnblogs.com/qinguoyi/p/7251305.html 出处: darknet在cpu上进行CNN计算时。 Code: void gemm_nn(int M, int N, int K, float ALPHA, float *A, int lda, float *B, int ldb,float *C, int ldc){int i,j,k