C语言在头文件中用extern架起变量沟通的桥梁

2023-05-16

//a.c
int foo;
int bar;
//a.h
extern int foo;
extern int bar;
//b.c
int foo=5;
//c.c
#include <stdio.h>
#include "a.c"
int main()
{
    printf("%d,%d\n",foo,bar);
    return 0;
}
//terminal
allen@xps:~/tmp$ ls
a.c  a.h  a.out  b.c  c.c
allen@xps:~/tmp$ rm a.out
allen@xps:~/tmp$ ls
a.c  a.h  b.c  c.c
allen@xps:~/tmp$ gcc -c *.c
allen@xps:~/tmp$ ls
a.c  a.h  a.o  b.c  b.o  c.c  c.o
allen@xps:~/tmp$ gcc *.o -o a.out
allen@xps:~/tmp$ ls
a.c  a.h  a.o  a.out  b.c  b.o  c.c  c.o
allen@xps:~/tmp$ ./a.out
5,0

如果写一个简单的Makefile实现自动化编译:

EXEC   =  a.out
SRCS   =  a.c b.c c.c
OBJS   =  $(SRCS:.c=.o)

$(EXEC): $(OBJS) 
    cc  $(OBJS) -o $(EXEC)
$(OBJS): $(INCL) 
clean:
    rm -f $(OBJS) $(EXEC) 

其实这个笔记只是想测试一下C语言中extern在头文件中的一点用法,还有源文件中include源文件的效果。不总结了,直接看上面例子知道可以这样用就行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言在头文件中用extern架起变量沟通的桥梁 的相关文章

  • keil中的extern的使用

    C51头文件使用extern的目的是外部变量或函数声明 使用时要注意 1 extern最好写在 h文件中 xff0c 方便后期的可读性 2 在使用extern进行外部变量声明时 xff0c 不能重新给变量赋值 例如 xff1a extern
  • Android NDK 为什么要 extern “C”

    由于C 43 43 函数支持重载 xff0c 就是一个C 43 43 函数 xff0c 可以有不同的参数个数和类型 xff0c 编译后函数名会变 为了避免ndk load 的C C 43 43 库的时候找不到这个函数 xff0c 索性都用
  • 通过示例去看JNI中为什么使用extern “C“

    经验总结 在JNI开发过程中 xff0c 我们使用C 43 43 去写一个动态库 xff0c 由于C 43 43 编译器对于函数的符号的生成需要进行名字修饰处理 xff0c 然后生成的函数符号不再跟源代码中定义的函数名一致 这样导致调用方通
  • extern C 透彻理解

    一 背景 一直以来对extern C的理解都停留在表面 xff0c 只知道为了C C 43 43 混合编程 今天来透彻理解下这个概念 二 整体的项目结构 jni Android mk LOCAL PATH 61 call my dir in
  • extern “C"作用

    1 在cpp文件中调用c文件中实现的函数的时候 xff0c 需要用extern 34 C 34 声明该函数 xff0c 否则cpp会按名字改编后的 函数名去找该函数而找不到 这是作用 xff09 c文件中有一函数 xff1a void Tr
  • 链接提示 extern "C"

    在 C 43 43 中调用 C 代码时 xff0c 需要给编译器指定 xff23 代码要按照 xff23 语言的编译器编译 xff0c 否则编译器会将 xff23 代码按照默认的C 43 43 编译器来编译 xff23 代码 xff0c 这
  • c++中规范使用全局变量

    c 中规范使用全局变量 一 static extern全局变量的区别 在qt c 编程中经常出现段错误 变量声名未前置extern等问题 经排查为全局变量使用不规范导致 static extern主要用来定义全局变量 static和exte
  • extern C 在c/c++中的使用

    http blog csdn net jscese article details 37821961 1 问题定义 在研究操作系统源代码或者在嵌入式系统中编写程序时 经常会发现下面这种用法 cpp view plain copy print
  • 如何设置 C++ 函数以便 p/invoke 使用它?

    希望这是一个无脑简单的问题 但这表明我缺乏 C 专业知识 我是一名 C 程序员 过去我使用 P Invoke 和其他人的 C C dll 进行了大量工作 然而 这次我决定自己编写一个包装器 C dll 非托管 然后从 C 调用我的包装器 d
  • 未定义类型的无效使用和存储大小未知

    我正在尝试将一些函数移动到单独的文件中c项目 I made util h文件与 ifndef UTIL H define UTIL H include
  • 如何在多个.cpp文件中使用全局变量?

    我有一个简单的程序 它尝试在单独的文件中打印我的全局变量 我正在使用Visual Studio 2013 专业版 IDE print h ifndef PRINT H define PRINT H void Print endif 打印 c
  • 在 Objective-C 代码中使用 extern "C" 时发生链接器错误

    我正在尝试创建一些可以从 iPhone 应用程序中的 Objective C 和 C 代码调用的实用函数 我有无法编译为 ObjectiveC mm 的第三方 C 类 我有一个头文件声明我的函数 然后有一个定义它们的 c 文件 我已经三次检
  • 访问全局变量导致目标 C 中的链接器错误

    我已经声明了一个全局变量 如下所示 extern NSString name interface viewcontrollerOne 在实现文件中 我正在通过某种方法访问该全局变量 例如 void someMethod name hello
  • 如何防止闭包编译器重命名特定对象的任何属性或方法?

    我正在与一个巨大的第三方库合作 巴比伦JS 将由其自己的 CDN 提供服务 并且不能包含在我的闭包编译器运行中 该库包含一个对象以及定义为其一部分的所有内容 它没有可用的 externs 文件 所以我开始编写一个 但它增长得很快 告诉 Cl
  • C、硬件抽象层中“extern”类型的变量

    我正在研究硬件抽象层 该 HAL 的目的是在 Linux 驱动程序和 MCU 驱动程序之间轻松切换 我正在研究SPI接口 下面是 打开 SPI接口的HAL函数的签名 哈尔 spi h spi handle t spi open spi po
  • 全局变量默认是extern还是相当于在global中用extern声明变量?

    我已经解决了以下两个问题 C 和 C 中的 static 和 extern 全局变量 https stackoverflow com questions 11055802 static and extern global variables
  • C隐式extern用于全局变量,什么时候发生,它是如何工作的

    我试图了解 C 全局变量在多个文件 编译单元 之间共享的方式 我已经阅读了精彩的问答here https stackoverflow com questions 1433204 what are extern variables in c
  • 在定义中使用 static 关键字与在 C 中使用声明

    以下编译良好 使用static仅在函数声明期间 include
  • 关于静态数据成员和成员函数定义的 Extern 关键字,C++

    C 标准是否允许extern静态数据成员和成员函数定义上的关键字 假设链接匹配 例如 struct A static int a external linkage void f external linkage extern int A a
  • 如何编译Freetype(2)和Harfbuzz(使用Visual Studio)以使它们协同工作?

    我找到了关于编译与 Harfbuzz 相关的 Freetype 的已知问题的良好文档 http www gregwessels com dev 2017 05 02 freetype harfbuzz html http www gregw

随机推荐

  • ubuntu配置USB权限

    usbcan设备在ubutu下使用 xff0c 每次必须动用root权限才能使用 xff0c 比较繁琐 参考如下文章进行配置 xff1a https blog csdn net bigdog 1027 article details 790
  • SocketCAN学习笔记

    1 对SocketCAN的理解 69条消息 对Socket CAN的理解 xff08 1 xff09 CAN总线原理 yuzeze的博客 CSDN博客 can socket 对Socket CAN的理解 xff08 2 xff09 Sock
  • Golang写Post请求并获取返回值

    直接上代码 xff0c 其中可以在下面代码中添加 package main import fmt net http io ioutil net url func main 需要post的数据 以key value形式提交 data 61 m
  • postMan 汉化

    1 下载postman解压安装 xff0c 下载地址Postman 2 下载汉化包 Release 9 2 0 hlmd Postman cn GitHub 选择postMan对应的版本 3 找到postman根目录我的在c盘 xff0c
  • 2022 小学组试题

    1 史密斯数 若一个合数的质因数分解式逐为位相加之和等于其本身逐位相加之和 则称这个数为smith数 如4937775 3 5 5 65837 而3 5 5 6 5 8 3 7 42 4 9 3 7 7 7 5 42 所以4937775是s
  • usaco 1 回文素数快速筛选

    求指定区间的回文素数 include lt bits stdc 43 43 h gt define N 10000010 using namespace std bool st N int cnt 61 0 primes N n m voi
  • C++ STL 学习笔记

    MAP的用法 xff1a 389找不同 给定两个字符串 s 和 t xff0c 它们只包含小写字母 字符串 t 由字符串 s 随机重排 xff0c 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 xff1a s 61
  • 大模型平台

    大模型训练平台的算力急速增长 xff1a 据报道 xff0c GPT3 5 的训练使用了微软专门建设的 AI 计算系统 xff0c 由 1 万个 V100 GPU 组成的高性能网络集群 xff0c 总算力消耗约 3640 PF days 即
  • Float IP 浮动IP地址

    xfeff xfeff 就是多个主机工作在 同一个集群中 xff0c 即两台主机以上 每台机器除了自己的实IP外 xff0c 会设置一个浮动IP xff0c 浮动IP与主机的服务 xff08 HTTP服务 邮箱服务 xff09 绑在一起的
  • linux 下安装 c++编译器的方法

    xfeff xfeff 假设你的电脑能够访问internet xff0c 这个命令会自动从网络下载并把软件安装到本地 超级用户权限 xff1a yum y install gcc c 43 43 另外一定不要天真的认为linux 下面 编译
  • linux 内核编译错误的原因

    xfeff xfeff 直接编译centos 7 内核目录下的代码出现如下错误 xff1a root 64 localhost 3 10 0 123 el7 x86 64 make make 1 No rule to make target
  • ifconfig 看到Rx error overrun 如何解决

    xfeff xfeff 一台机器经常收到丢包的报警 xff0c 先看看最底层的有没有问题 ethtool em2 egrep 39 Speed Duplex 39 Speed 1000Mb s Duplex Full ethtool S e
  • AES-GCM算法

    AES GCM算法简介 AES GCM算法是带认证和加密的算法 xff0c 同时可以对给定的原文 xff0c 生成加密数据和认证码 参数如下 xff1a 1 xff09 带加密的原文 2 xff09 存储加密后密文 3 xff09 IV向量
  • cmake 编译c++项目

    分两步 xff1a CMakeLists txt文件编写结束以后就可以对工程进行编译了 xff0c 进入build目录 并执行cmake和make指令 xff0c 如下 xff1a 第一步 cmake span class token pu
  • sshd 无法启用的问题 Could not load host key: /etc/ssh/ssh_host_rsa_key Could not load host key: /etc/ssh/ss

    原文链接 xff1a http blog csdn net lynn kong article details 9112009 1 问题现象 版本 xff1a Grizzly master分支代码2013 06 17 部署 xff1a 三个
  • iptables nat

    NAT一般情况下分为SNAT xff0c DNAT和PNAT 此篇主要讲述的是使用iptables配置NAT xff0c 所以这3种NAT的区别和应用场景就简单的说明一下 SNAT xff1a 源地址转换 目标地址不变 xff0c 重新改写
  • Qt 的Cmake方式如何创建资源文件和添加类

    今天看到有人问Qt 的Cmake方式如何创建资源文件 xff0c 这个问题和添加类都是一样的 xff0c 也有朋友问如何添加类 xff0c 百度的回答是把cmake改成Qmake 这样等于没有回答 xff0c 根据自己的经验我在这里回答一下
  • ajax 请求头Authorization 添加账号密码访问

    在header中添加 34 Authorization 34 字段 xff0c 值为 34 api key api secret 34 进行base64加密后 在前面加入 34 Basic 34 Basic后有空格 字符串 最后形式为 34
  • Authorization—权限控制流程

    本篇是对Shiro体系架构的介绍 xff0c 本栏目大部分内容来自于Shiro官网 翻译过程中已经尽量保证用词的准确性和易懂性 xff0c 如有不准确或者不确切的地方 xff0c 请联系作者加以修改 本篇内容翻译自Authorization
  • C语言在头文件中用extern架起变量沟通的桥梁

    span class hljs comment a c span span class hljs keyword int span foo span class hljs keyword int span bar span class hl