C语言的static函数

article/2025/11/5 13:28:45

前几天,一个同事跟我说在我们的代码库里面看到,一个static函数被放在了头文件里面,可构建的时候却没有报告链接错误。我的第一反应也是,函数被放在头文件里面,当这个头文件被多个源文件引用之后,再把那几个源文件编译产生的目标文件链接起来的时候,应该会产生重定义错误的……

后来又仔细一想,static关键字不正是解决不同的源文件中、同名函数的命名冲突问题的吗?于是,快速做了一个小验证:

//“static_func.h”
#include <stdio.h>
static void display() {printf("This is static function in a header file.\n");
}//“funcA.c”
#include "static_func.h"
void funcA() {printf("This is funcA...\n");display();
}//“funcB.c”
#include "static_func.h"
void funcB() {printf("This is funcB...\n");display();
}
//“main.c”
extern void funcA();
extern void funcB();
int main()
{funcA();funcB();return 0;
}

正常编译、链接没有问题,可执行文件也能正常执行,证明了存在同名static函数的不同源文件链接到一起是没有问题的。

虽然还不清楚编译器具体是怎么实现的,但是对于C语言的static函数可以简单的理解为,编译器在处理static函数时,可能把static函数所在文件的文件名当成了函数名的一部分,类似于C++中命名空间的概念。


使用‘nm’命令查看可执行文件,除了看到函数‘funcA’和‘funcB’之外,还看到了两个‘display()’,编译器最终是怎么区分这两个同名的函数的暂时还没有搞清楚,有待后续再进一步研究。


http://chatgpt.dhexx.cn/article/VDYtnMkt.shtml

相关文章

c与c++ static函数的区别

c与c static函数的区别 c 与c static 函数的区别 static 关键字是 C, C 中都存在的关键字 , 它主要有三种使用方式 , 其中前两种只指在 C 语言中使用 , 第三种在 C 中使用 (C,C 中具体细微操作不尽相同 , 本文以 C 为准 ).(1) 局部静态变量 (2) 外部静态变量 / 函数 (3) 静…

static的在函数中作用

看如下例子 #include<stdio.h> int f() {static int k0;//用static&#xff0c;k只会在第一次调用这个函数时初始化为0&#xff0c;此后不再初始化k;return k; } int main() {printf("%d\n",f()); printf("%d\n",f()); 再次次调用f()函数&#xff0…

c++中static的用法详解

C 语言的 static 关键字有三种&#xff08;具体来说是两种&#xff09;用途&#xff1a; 1. 静态局部变量&#xff1a;用于函数体内部修饰变量&#xff0c;这种变量的生存期长于该函数。 下面展示一些 内联代码片。 int foo(){static int i 1; // note:1//int i 1; // not…

C语言中static函数

转载自&#xff1a; https://blog.csdn.net/cw616729/article/details/95003577 https://blog.csdn.net/keyeagle/article/details/6708077 1.含义&#xff1a; 定义为static的函数&#xff0c;作用域为本文件&#xff0c;它只能在定义该函数的源文件中使用。 2.好处 使用s…

static作用(修饰函数、局部变量、全局变量)

C语言&#xff1a;static作用&#xff08;修饰函数、局部变量、全局变量&#xff09; 一、 static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式&#xff0c; 静态全局变量当然也…

数据链路层协议 ——— 以太网协议

文章目录 链路层解决的问题以太网协议认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMUT对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响数据跨网络传输的过程 ARP协议ARP协议的作用ARP数据的格式ARP协议的工作流程 链路层解决的问题 IP拥有将数据跨网…

DNS详解

前言&#xff1a; 前面讲了域名、IP&#xff0c;那么还缺少一个主角—DNS。这些都是网络中最最最基础的&#xff0c;也是最重要的概念&#xff0c;很有必要深入学习下。 网站打开的原理 我们在通过网站网址打开网站的过程中&#xff0c;其实就是浏览器获取到了隐藏在网址背后的…

一文读懂物联网 MQTT 协议之实战篇

一、前言 上一篇我们介绍了 MQTT 协议格式以及相关的特性&#xff1a;一文读懂物联网 MQTT 协议之基础特性篇&#xff0c;这一篇我们就来实战一番&#xff0c;理论得与实践结合&#xff0c;方能吃透 MQTT。 我的那个读者还提到了讲一下 Mosquitto&#xff0c;这是一款开源消息…

基于光流传感器定位和导航的自主飞行无人机

基于光流传感器定位和导航的自主飞行无人机 An Autonomous UAV with an Optical Flow Sensor for Positioning and Navigation 注&#xff1a;翻译水平有限&#xff0c;错误之处&#xff0c;敬请指正&#xff01; 原文链接&#xff1a;http://cdn.intechopen.com/pdfs/45731.p…

Kubernetes NetworkPolicy:打造更安全的容器运行环境

常见的应用可以分为两大类&#xff1a;Job和Service。Job比较简单&#xff0c;就是一个普通的任务&#xff0c;完成之后就退出&#xff0c;一般不需要暴露对外服务的网络监听端口。Service是指长期运行的进程&#xff0c;监听某个网络端口&#xff0c;其他服务可以通过网络连过…

Drupal远程代码执行漏洞(CVE-2018-7600)

目录 一. 漏洞原理 二. 影响版本 三. 漏洞环境搭建 四. 漏洞复现 一. 漏洞原理 Drupal是一个开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;全球超过100万个网站&#xff08;包括政府&#xff0c;电子零售&#xff0c;企业组织&#xff0c;金融机构等&#xff0…

记一次从盲SSRF到RCE

公粽号&#xff1a;黒掌 一个专注于分享网络安全、黑客圈热点、黑客工具技术区博主&#xff01; 一 前言 发现此漏洞的漏洞赏金计划不允许公开披露&#xff0c;因此我不会直接使用涉及的系统名称。该项目是发布在Hackerone时间最长漏洞奖金最大的项目之一, Hackerone上有很多关…

002.光流传感器(ADNS0380版)使用说明

先放广告&#xff0c;以下是光流传感器购买地址&#xff08;全网最低价并且唯一提供代码支持的&#xff09;&#xff1a; https://item.taobao.com/item.htm?spma230r.1.14.63.j2eDn3&id541014211123&ns1&abbucket12#detail 如果模块直接使用在APM飞控上请看下文标…

003.关于光流传感器(ADNS3080)调焦问题

关于光流传感器使用官方网址如下&#xff1a; http://ardupilot.org/copter/docs/common-mouse-based-optical-flow-sensor-adns3080.html 微信公众号&#xff1a;嵌入式大玩家 更多精彩文章我将第一时间在微信公众号里面分享&#xff0c;如果不想错过,可以关注我的微信公众号。…

腾讯笔试题——逆序对

这题花了我非常多时间&#xff0c;ac率从10&#xff05; --> 50&#xff05; --> 60&#xff05; --> 70&#xff05; --> 80&#xff05; --> 100&#xff05; &#xff0c;被这题疯狂支配几个小时&#xff01; 最关键没有详细的题解可以参考&#xff0c;大数据…

2020秋招腾讯后台笔试题(一)

点击上方蓝字设为星标 下面开始今天的学习&#xff5e; 这是2020届腾讯秋招的笔试题&#xff0c;其实就是19年九月份的题目&#xff0c;总共五道题&#xff0c;这篇文章写说两道题&#xff0c;都是有关于栈的应用的 01 压缩算法 小Q想要给他的朋友发送一个神秘字符串&#xff0…

腾讯笔试-1

1、什么是运维&#xff1f;什么是游戏运维&#xff1f;1&#xff09;运维是指大型组织已经建立好的网络软硬件的维护&#xff0c;就是要保证业务的上线与运作的正常&#xff0c;在他运转的过程中&#xff0c;对他进行维护&#xff0c;他集合了网络、系统、数据库、开发、安全、…

腾讯 C++ 笔试/面试题及答案

星标/置顶 公众号&#x1f447;&#xff0c;硬核文章第一时间送达&#xff01; 链接 | https://zhuanlan.zhihu.com/p/274473971 题很多&#xff0c;先上题后上答案&#xff0c;便于大家思考 问题点&#xff1a; 1、C和C的特点与区别&#xff1f; 2、C的多态 3、虚函数实现 4、…

腾讯2020校园招聘笔试

输入1&#xff1a; 2 2 1 1 1 1 输出1&#xff1a; 0 输入2&#xff1a; 2 2 1 2 2 1 输出2&#xff1a; 2 import java.util.Scanner; public class Main { public static void main(String[] args) {// TODO Auto-generated method stubScanner scnew Scanner(Syste…

腾讯笔试题20210321

一、链表树 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言 2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言 524288K 64bit IO Format: %lld 题目描述 在牛牛所在的世界&#xff0c;链表是一种二叉树。 这是牛牛第一次见到链表树&#xff0c;他感到十分好奇&a…