【C语言常量探秘】:const关键字背后的链接属性你真的懂吗?

第一章:C语言const常量链接属性的宏观认知

在C语言中,`const`关键字用于声明不可修改的变量,但其背后的链接属性(linkage)常常被开发者忽视。理解`const`常量的存储类别与链接行为,是掌握C语言作用域与跨文件数据共享的关键。

const变量默认具有内部链接

与普通全局变量不同,全局`const`变量默认具有内部链接(internal linkage),这意味着即使在多个源文件中定义同名的`const`全局变量,也不会引发链接冲突。编译器会为每个翻译单元生成独立的副本。 例如:
// file1.c
const int value = 42;

// file2.c
const int value = 100; // 合法:内部链接避免了重定义错误
若希望`const`变量具有外部链接(external linkage),需显式使用`extern`关键字:
// header.h
extern const int shared_value;

// file1.c
const int shared_value = 999; // 定义并初始化

// file2.c
#include "header.h"
// 可安全访问 shared_value

存储类别的影响

`const`变量通常被放置在只读数据段(.rodata),由操作系统保护以防止运行时修改。其实际存储位置取决于优化策略和使用方式。 以下表格总结了常见`const`声明的链接属性:
声明方式链接属性说明
const int a = 10;内部链接文件作用域下默认内部链接
extern const int b = 20;外部链接可被其他文件通过extern引用
static const int c = 30;内部链接限制在本文件内使用
  • 全局const变量默认内部链接,避免命名冲突
  • 使用extern可实现跨文件共享只读数据
  • 链接属性直接影响符号导出与内存布局

第二章:const常量的基础语义与存储机制

2.1 const修饰符的本质:只读变量还是真正常量

在C/C++中,`const`修饰符常被误解为定义“常量”,但实际上它更准确的含义是“只读”。编译器通常不会为其分配静态存储,而是进行符号替换或寄存器优化。
编译期常量 vs 运行期只读
当`const`变量具有静态初始化且值已知时,编译器可能将其视为常量表达式:
const int size = 10;
int arr[size]; // 合法:size被视为编译期常量
此处`size`虽非宏定义,但因初始化为字面量,可用于数组声明。
内存层面的行为分析
然而,`const`变量仍占据内存空间,且可通过指针间接修改(未定义行为):
const int a = 5;
int* p = const_cast(&a);
*p = 10; // 危险操作:可能导致不可预测结果
这表明`a`本质仍是变量,仅由编译器强制限制修改。
特性宏常量 (#define)const 变量
类型安全无有
是否占内存否可能
可调试性差好

2.2 编译期常量与运行期常量的判定实践

在Go语言中,常量的求值时机分为编译期和运行期。编译期常量(compile-time constant)在编译阶段即可确定值,而运行期常量则需在程序执行时计算。
常量分类示例
const a = 10            // 编译期常量:字面量
const b = 2 * a          // 编译期常量:表达式可静态求值
const c = len("hello")   // 编译期常量:内置函数可求值

var x = 5
const d = x + 1          // 非法:变量参与,无法编译期求值
上述代码中,a、b、c均为编译期常量,因其值可在编译时完全确定。而涉及变量的表达式不能作为常量。
判定规则总结
  • 仅包含字面量和可静态求值函数的表达式属于编译期常量
  • 涉及变量、函数调用(非常规内置函数)的表达式为运行期求值
  • 编译器会拒绝无法在编译期确定值的常量声明

2.3 const变量的内存布局分析与段属性探究

在C/C++中,`const`变量的存储位置取决于其作用域与链接属性。全局`const`变量通常被放置在只读数据段(`.rodata`),而局部`const`变量可能位于栈上,由编译器决定优化方式。
内存段分布示例
const int global_const = 42;        // 存储在 .rodata 段
void func() {
    const int local_const = 10;     // 可能优化为立即数或栈变量
}
上述代码中,`global_const`被编译器放入只读段,不可修改;`local_const`若未取地址,可能直接被内联为立即数。
常见存储区域对比
变量类型存储段可写性
全局const.rodata否
局部const(未取址)寄存器/优化N/A
局部const(取址)栈逻辑只读

2.4 字符串字面量与const指针的关联行为验证

在C++中,字符串字面量被存储于静态存储区,其类型为`const char[]`。当将其赋值给指针时,常涉及`const`修饰的指针语义。
基本行为示例

const char* ptr = "Hello";
char* mutablePtr = const_cast("World"); // 不推荐:违反只读约定
第一行是标准用法,`ptr`指向字符串常量;第二行虽可编译,但修改`mutablePtr`所指内容导致未定义行为。
内存与比较特性
  • 相同字面量可能被合并(字符串池优化)
  • 使用==比较指针地址而非内容
  • 应使用std::strcmp进行内容比较
验证指针唯一性
表达式结果说明
"Hi" == "Hi"true/false取决于编译器是否合并
*(ptr + 0)'H'可通过指针访问字符

2.5 多文件作用下const变量的默认链接属性实验

在C++中,`const`变量的链接属性直接影响其在多文件间的可见性。默认情况下,文件作用域中的`const`变量具有内部链接(internal linkage),即仅在定义它的编译单元内可见。
实验代码结构
// file1.cpp
#include <iostream>
const int value = 42;

void printValue();

int main() {
    std::cout << "file1 value: " << value << std::endl;
    printValue();
    return 0;
}

// file2.cpp
#include <iostream>
extern const int value;

void printValue() {
    std::cout << "file2 value: " << value << std::endl;
}
上述代码中,`file2.cpp`通过`extern`声明引用`file1.cpp`中的`const int value`。但由于`const`默认为内部链接,链接器无法找到外部定义,将导致链接错误。
解决方案对比
  • 使用extern const int value = 42;显式声明为外部链接
  • 或在头文件中定义并包含,确保多文件共享同一定义

第三章:链接属性的核心概念解析

3.1 外部链接、内部链接与无链接的精确定义

在超文本系统中,链接是资源间导航的核心机制。根据目标资源的位置与引用方式,可将链接精确划分为三类:外部链接、内部链接与无链接。
外部链接
指指向当前文档所在域之外的资源的链接,通常以完整 URL 形式出现。例如:
<a href="https://example.com/page.html">访问外部网站</a>
该代码创建一个指向外部域名的超链接,浏览器会跳转至指定域下的资源。
内部链接
用于在同一文档内或同一站点内部跳转,可提升页面导航效率。
<a href="#section2">跳转到第二节</a>
...
<h2 id="section2">第二节</h2>
此锚点链接实现页内快速定位,适用于长文档结构。
无链接
通过 href="#" 或 javascript:void(0) 声明但不触发实际跳转的行为常用于事件绑定。
类型示例用途
外部链接https://site.com跨域资源引用
内部链接#section-id页内导航
无链接javascript:void(0)脚本触发占位

3.2 理解翻译单元与链接过程中的符号可见性

在C/C++编译过程中,每个源文件构成一个**翻译单元**,独立编译为目标文件。符号可见性决定了这些单元之间函数与变量的访问权限。
符号的作用域与链接属性
具有内部链接的符号(如static修饰的函数)仅在本翻译单元内可见;外部链接符号则可被其他单元引用。例如:

// file1.c
static int internal_var = 42;           // 内部链接,不可被其他文件访问
int external_var = 100;                 // 外部链接,可被extern引用

void func() { }
在file2.c中可通过extern int external_var;访问该变量,但无法访问internal_var。
链接阶段的符号解析
链接器将多个目标文件合并时,会解析未定义符号。若出现重复的强符号(如全局变量定义),将导致链接错误。
  • 静态变量和函数限制在翻译单元内
  • extern关键字声明外部符号
  • 链接器确保符号定义唯一性

3.3 static与extern对const变量链接性的实际影响

在C++中,`const`变量默认具有内部链接性(internal linkage),这意味着其作用域被限制在定义它的编译单元内。使用`static`或`extern`关键字可以显式控制这种链接行为。
static修饰的const变量
`static`进一步强化内部链接,确保变量仅在当前文件可见:
static const int bufferSize = 1024;
该变量不会与其他翻译单元中的同名变量冲突,适用于配置常量。
extern声明的const变量
若需跨文件共享`const`变量,必须使用`extern`并分离声明与定义:
// file1.cpp
extern const double PI = 3.14159;

// file2.cpp
extern const double PI; // 引用外部定义
此时`PI`具有外部链接性,可在多个源文件中访问,但必须确保仅在一个文件中定义。
关键字链接性作用域
无内部本文件
extern外部全局可访问

第四章:跨文件场景下的const常量链接行为

4.1 不同编译单元间const全局变量的共享机制验证

在C++中,`const`全局变量默认具有内部链接(internal linkage),这意味着即使在多个编译单元中定义同名`const`变量,也不会引发重定义错误,因为每个编译单元都拥有其独立副本。
跨编译单元共享const变量
要实现共享,必须显式声明为`extern`以获得外部链接:
// file1.cpp
extern const int value = 42;

// file2.cpp
extern const int value; // 引用同一实例
上述代码确保`value`在所有编译单元中引用同一内存地址,避免数据冗余。
验证链接行为
可通过打印地址验证是否真正共享:
  • 若地址相同,则为外部链接共享;
  • 若地址不同,则为内部链接独立副本。
此机制对常量池优化和跨模块配置共享具有重要意义。

4.2 使用extern声明外部const常量的正确方式

在C++多文件项目中,若需共享const常量,应使用`extern`关键字在头文件中声明,确保链接时唯一定义。
声明与定义分离
// config.h
extern const int MAX_BUFFER_SIZE;

// config.cpp
const int MAX_BUFFER_SIZE = 1024;
上述代码中,`extern`表明该常量定义在其他编译单元。头文件仅声明,避免多重定义错误;实际定义位于`.cpp`文件中,保证符号可见性。
常见错误对比
  • 错误:在头文件直接定义const int N = 100;,导致每个包含该头文件的源文件都生成独立副本;
  • 正确:使用extern声明,全局仅一处定义,实现真正的外部链接。
这种方式适用于跨模块共享配置常量,是大型项目中推荐的做法。

4.3 避免重复定义冲突:static限定内部链接的工程实践

在大型C/C++项目中,多个源文件可能包含同名全局变量或函数,导致链接时发生符号重定义错误。使用 `static` 关键字限定变量或函数的作用域为内部链接,可有效避免此类冲突。
static修饰符的作用机制
当在文件作用域中声明变量或函数为 `static` 时,其链接属性被限制为仅在当前编译单元内可见。

// file1.c
static int counter = 0;        // 仅在file1.c中可见
static void increment(void) {  // 仅在file1.c中可用
    counter++;
}
上述代码中的 `counter` 和 `increment` 不会与其它文件中的同名标识符产生冲突,因为编译器为它们生成局部符号(如 `L_` 前缀),不参与跨文件符号合并。
工程最佳实践对比
做法风险建议
全局变量无static链接冲突加static或使用extern显式声明
辅助函数用static无推荐,提升模块封装性

4.4 头文件中定义const常量的陷阱与解决方案

在C++项目中,将`const`变量定义在头文件里看似安全,实则可能引发**多重定义**或**链接冲突**。若未使用`inline`或`static`修饰,每个包含该头文件的编译单元都会生成一个符号实例。
问题复现
// config.h
const int MAX_BUFFER_SIZE = 1024;
当多个源文件包含此头文件时,链接器会报错:重复定义`MAX_BUFFER_SIZE`。
解决方案对比
方式作用域链接性推荐程度
static const文件内内部链接⭐⭐⭐⭐
inline const (C++17)全局外部链接⭐⭐⭐⭐⭐
extern + 定义分离跨文件外部链接⭐⭐⭐
推荐实践
使用`inline`确保唯一实例:
// config.h
inline const int MAX_BUFFER_SIZE = 1024;
该方式符合ODR(One Definition Rule),无需手动管理定义位置,适合现代C++工程。

第五章:深入理解const链接属性的技术价值与最佳实践

提升符号可见性的控制精度
在C/C++中,const变量默认具有内部链接(internal linkage),这意味着其作用域被限制在定义它的编译单元内。这一特性可有效避免命名冲突,增强模块化设计。 例如,在头文件中定义常量时,若未使用extern显式声明,const将防止多个源文件链接时报错:

// config.h
static const int MAX_RETRY = 3; // 安全:内部链接
优化编译期常量传播
编译器可利用const的不可变性进行常量折叠与内联替换,减少运行时开销。当变量初始化为编译期常量时,其值可直接嵌入指令流。
  • 避免动态内存分配:数组大小可使用const表达式定义
  • 提高缓存命中率:常量数据集中存储,便于预取优化
  • 支持 constexpr 延伸:在C++11及以上版本中实现编译期计算
链接行为对比分析
声明方式链接属性跨文件访问
const int val = 10;内部链接不可访问
extern const int val;外部链接需在源文件定义
实战建议:安全共享常量
若需跨编译单元共享常量,应在头文件中使用extern声明,并在单一源文件中定义:

// global.h
extern const double PI;

// global.c
const double PI = 3.1415926;
此模式确保唯一定义,符合ODR(One Definition Rule),同时保留类型安全性。
const常量和指针 以及分别在C和C++中的理解 const 关键字在 C/C++ 中用途广泛,可以有效提高代码的安全性和可维护性。通过合理使用 const,可以明确表达设计意图,减少潜在的错误。常量性const是“只读建议”,可通过指针绕过。const是强制约束,违反会触发编译器错误。编译期优化C++ 允许const变量参与编译期计算(如模板元编程)。C 的const变量通常需要运行时求值。作用域与链接性C++ 的const全局变量默认仅在当前文件可见。C 的const全局变量默认可跨文件访问。与#define的关系C++ 推荐用。 阅读详情

相关推荐

C语言中关键字const的总结

 在总结const的用法时,我们先简单介绍一下const的概念!const可以修饰变量,使该变量的值不能改变(即就是可以用来定义常量),而宏常量#define(预编译指令)也可以用来定义常量,这里我们将二者做一个简单的对比。(1)const常量有数据类型,#define没有数据类型;(2)const可以保护被修饰的东西,防止其被意外修改,可以增强程序的健壮性;        #define只进行字...

cherrydreamsover的博客 1328

C语言:链接属性与存储类型

本人录制技术视频地址:https://edu.youkuaiyun.com/lecturer/1899 欢迎观看。一、 链接属性C语言中链接属性决定如何处理在不同文件中出现的标示符。标示符的作用域与它的链接属性有关,但这两个属性并不相同。链接属性有3种: external(外部),internal(内部) 和 none(无)。1. none: 没有链接的标示符,总是被当做单独的个体,也就是说改标示符的多个声明...

秋恨雪 5107

C语言核心探秘:深入理解字符串常量的共享与不可变之谜

本文深入探讨了C语言字符串常量的两大核心特性:共享性与不可变性。字符串常量存储在内存的只读区域,编译器会优化相同字符串的存储使其共享同一地址空间(字符串池化)。由于位于只读段,任何修改字符串常量的尝试都会导致程序崩溃(段错误)。文章通过代码案例验证了这些特性,并提供了创建可修改字符串的正确方法(使用字符数组)和最佳实践(const关键字声明)。文中还比较了GCC和MSVC编译器在字符串处理上的差异,帮助开发者更好地理解并避免潜在问题。

Web安全工具库 1689

【C语言常量解析】:const关键字的链接属性你真的懂吗?

掌握C语言const常量的链接属性,彻底解决变量作用域与跨文件共享难题。详解const在不同场景下的内部链接特性,揭示其与#define及extern的区别。理解编译优化原理,提升代码安全性与可维护性。C语言const常量的链接属性深度解析,值得收藏。

CompiGap的博客 252

FDTD仿真实战:从材料导入到反射率曲线分析

本文提供了一份完整的FDTD仿真实战指南,详细讲解了从自定义材料(如WO3)数据导入、结构建模、仿真区域与网格设置,到光源与监视器配置、运行仿真并提取反射率数据的全流程。重点解决了材料库缺失、网格优化、边界条件设置等常见难题,旨在帮助研究人员高效、准确地通过FDTD仿真获取材料的关键光学特性——反射率曲线。

elastic6hunter的博客 341

Transformer数学推导——Q38 旋转位置编码(RoPE)的复数形式 对注意力分数的几何影响分析

RoPE 的复数形式为自然语言处理中的位置编码提供了创新且有效的解决方案。通过深入的数学理论分析,明确了其对注意力分数的几何影响及在捕捉位置信息方面的优势。在 LLM 的实际应用中,RoPE 复数形式在多个任务和场景中展现出强大的性能,特别是在处理长序列文本时,能够有效捕捉长距离依赖、缓解位置编码局限性并提升处理效率。然而,RoPE 复数形式也面临计算复杂度高、超参数调整困难和位置信息平衡等挑战。通过合理的优化策略和与其他技术的结合,有望进一步提升其性能。

墨顿随笔 1419

C语言const、static、extern、volatile关键字总结

一、const 关键字总结: 作为一个程序员,我们看到关键字const时,首先想到的应该是:只读。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子的中const作用: 1. 修饰常量 用const修饰的变量是不可变的,对const变量赋值:一是在声明时对变量初始化,二是在函数中声明const形参,函数调用时会得到实参的值。以下两种定义形式在本质上是...

心中的日月的博客 5178

进芯AVP28335烧录避坑全记录:CCS、Uniflash、C2Prog、SDFlash四大工具配置详解

本文详细解析了进芯AVP28335芯片在烧录过程中遇到的常见问题及解决方案,涵盖CCS、Uniflash、C2Prog和SDFlash四大工具的配置要点。针对国产器件AVP28335的特殊需求,提供了从开发环境准备到烧录验证的全流程指南,帮助开发者高效完成程序烧录,避免常见陷阱。

weixin_30836759的博客 588

详解const、static关键字

由以上代码可以看出,在没有static修饰的时候每一次调用test函数,函数中i的值都会重新赋值,而当i变量由static修饰的时候,在test结束之后并没有被销毁,下次调用test函数时i的值仍然是上次调用时i++的值。我们在编写函数的过程中,如果要写出优秀的代码,那么在编写函数的过程中就要尽量的使用const修饰,这样可以避免当我们想要传入的参数不被修改时而不小心被修改导致bug的出现,增加了代码的可用性以及目的性。用const修饰函数,主要是防止在传参的时候,在被传入的函数中传入的参数被修改。

lin_95的博客 1万+

从DeepMimic到虚拟偶像:用动作捕捉数据训练AI跳舞的完整流程(附Blender插件配置)

本文详细介绍了如何利用DeepMimic的深度强化学习框架,将动作捕捉数据转化为虚拟偶像或游戏角色的舞蹈动作。从核心的模仿学习理念、PyBullet环境搭建、策略网络与奖励函数设计,到数据处理、训练技巧(如参考状态初始化),最后讲解了如何将训练好的AI模型集成到Blender和Unity等工具中,实现从数据到实时驱动角色的完整流程。

weixin_29054399的博客 504

保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码)

本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。

weixin_30555125的博客 405

C语言const的用法

1、const的用法 const是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字。用const定义只读变量的方法很简单,就在定义变量时前面加const即可,如: const double pi = 3.1415926; 用const定义的变量的值是不允许改变的,不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋...

C语言技术网-码农有道 1万+

基于Simulink的电机功率因数校正仿真

PF=SP​=视在功率有功功率​=cosϕ⋅Irms​I1​​(非正弦时)位移因数(cosϕ):基波电压电流相位差畸变因数(I1​/Irms​):谐波导致电流有效值增大本文带你完成了电机系统功率因数校正的Simulink仿真,实现了:✅ 理解了低功率因数的成因与危害✅ 搭建了无PFC、无源PFC、有源PFC三种对比模型✅ 掌握了Vienna整流器建模与dq解耦控制方法✅ 实现了PF与THD的自动计算与评估✅ 验证了有源PFC在PF、THD、稳定性上的全面优势。

amy_mhd的博客 154

C语言关键字static、extern、const、volatile 介绍

static作用: 修饰局部变量,改变局部变量生命周期。(具有记忆功能) 下面我们看个例子: (1)变量不加 static 修饰 运行结果如下: (2)变量被 static 修饰 运行结果如下: 总结: 不加static修饰,函数或者代码块中的变量在函数或者代码块执行完毕后就直接回收销毁了,每次执行都会重新分配内存,每次都会销毁。 加 static 修饰,函数或者代码块中的变量在函数或者...

淡然 2307

2020年大连理工大学《单片机原理及应用》期末试卷

2020年大连理工大学《单片机原理及应用》期末试卷 此试卷为大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷。 ...

无名何许人的博客 1478

360 c301:360路由器刷openwrt、不死uboot、双系统 、wifi中继附件

360路由器刷openwrt、不死uboot、双系统 、wifi中继文章附件: 360-301_0.8.3.0.bin 360art.bin openwrt-by-981213-2015-12-13-r47884-ar71xx-generic-qihoo-c301-dual-flash-squashfs-factory.bin openwrt-by-981213-2015-12-13-r47884-ar71xx-generic-qihoo-c301-dual-flash-squashfs-sysupgrade.bi openwrt-by-981213-2015-12-13-r47884-ar71xx-generic-qihoo-c301-flash1-squashfs-factory.bin openwrt-by-981213-2015-12-13-r47884-ar71xx-generic-qihoo-c301-flash1-squashfs-sysupgrade.bin openwrt-by-981213-2015-12-13-r47884-ar71xx-generic-qihoo-c301-flash2-squashfs-factory.bin openwrt-by-981213-2015-12-13-r47884-ar71xx-generic-qihoo-c301-flash2-squashfs-sysupgrade.bin u-boot-ar9344-qihoo-c301.bin

「C系列」C 常量

虽然枚举值在逻辑上是常量,但它们在C语言中并不是真正的常量(即它们可以被赋值,但这通常是不推荐的)。虽然字符串常量本身是不可修改的,但你可以通过指针来操作字符串的副本(即,你可以创建一个字符数组,并将字符串常量复制到该数组中,然后修改该数组的内容)。对于简单的常量值(如数学常数或物理常数),并将其初始化为一个值来实现,但这种方法并不是真正的常量,因为变量仍然可以在声明它的同一文件的其他函数中被修改。修饰的变量在逻辑上是常量,但在某些情况下(例如,作为数组的大小或函数参数),它们可能不能像。

日常笔记/总结/系列知识梳理 2110

[最新]全国二调地类分类表.pdf

[最新]全国二调地类分类表.pdf

C语言——static 关键字与 const 关键字

C语言——static 关键字与 const 关键字 二、static 修饰全局变量——-称为静态全局变量 static修饰的全局变量,使得这个全局变量只能在自己所在的源文件(.C)内部可以使用,其他源文件不能使用 本质:全局变量在其他源文件内部可以被使用,是因为全局变量是具有外部链接属性,但是被static修饰后,就变成了内部链接属性

LVZHUO_2022的博客 1178

蓄电池双向三相交错并联DC-DC变换器,保证完美运行。

https://blog.youkuaiyun.com/qq_46895281/article/details/125362938?spm=1001.2014.3001.5502

博睿BR-VP2000A拼接控制器配套软件包(含操作指南与全部运行库)

这个软件包专为博睿BR-VP2000A系列拼接控制器设计,直接支持多屏拼接显示控制功能。里面包含完整可执行程序所需的所有动态链接库,比如Qt5Core.dll、Qt5Widgets.dll、Qt5Gui.dll等界面基础组件,还有avcodec-57.dll、avformat-57.dll、swscale-4.dll等音视频解码渲染核心库,以及HCNetSDK.dll、hi_h264dec_w.dll等网络摄像机和H.264硬解相关模块。D3Dcompiler_47.dll、libGLESV2.dll、opengl32sw.dll保障图形加速兼容性,qtnribbond4.dll和qtnribbon4.dll支撑程序顶部功能区界面。同时集成串口通信支持(Qt5SerialPort.dll)、数据库连接能力(Qt5Sql.dll)和网络功能(Qt5Network.dll),满足拼接屏系统配置、信号源管理、窗口布局、预案调用等日常操作需求。压缩包内附带详细使用说明文档,帮助用户快速完成安装、参数设置与基础调试。

揭秘C语言const常量:为何它有时具有外部链接?

掌握C语言const常量的链接属性,解析其在文件作用域中默认内部链接的原因及外部链接实现方法。适用于多文件项目开发,避免重复定义错误,提升代码模块化。理解const变量的存储与链接机制,值得收藏。

VarPerch的博客 309

【c语言】详解const常量修饰符 | 指针变量的不同const修饰

​ c语言系列专栏:c语言之路重点知识整合 目录 一、const是关键字! 二、const修饰指针变量 总结 一、const是关键字! const是 constant 的缩写,意思是“恒定不变的”。它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。int、double、float、return、extern等都是关键字,在语言或编译系统的实现中具有特殊含义的const放到谁的前面,谁就不可改。放到指针变量前指向不可改,放到星号前内容不可改,同时修饰都不可改。

努力让自己的能力配得上梦想. 2887

C语言常量和变量详解

C语言的常量和变量详解

qq_28576837的博客 4635

C语言关键字const, static, extern, volatile总结

一、const 关键字总结: 作为一个程序员,我们看到关键字const时,首先想到的应该是:只读。因为,它要求其所修饰的对象为常量,不可对其修改和二次赋值操作(不能作为左值出现)。看几个例子的中const作用: 1. 修饰常量 用const修饰的变量是不可变的,对const变量赋值:一是在声明时对变量初始化,二是在函数中声明const形参,函数调用时会得到实参的值。以下两种定义形式在本质上是一样的: const int a = 10; int const a = 10; .

fhb1922702569的博客 1587

【C语言高手进阶必备】:彻底搞懂const全局常量的外部链接之谜

掌握C语言const常量的链接属性,解析全局常量外部链接机制,避免重复定义与链接错误。适用于多文件项目开发,揭示static与extern对const变量链接性的关键影响,提升程序模块化设计能力,值得收藏。

ProcePerch的博客 633

c语言-常量和变量

本文详细介绍了C语言中常量和变量的定义,包括常量的分类、变量的定义、作用域等。

诊断协议那些事儿's blog 1912

Ruff 类型检查器 ty 的 `types.new_class()` 动态类创建推断实现解析

`types.new_class()` 是 Python 标准库中除 `type(name, bases, namespace)` 之外的另一条动态类创建入口,它额外支持 `kwds` 与 `exec_body` 参数,并正确处理 `__mro_entries__` 与元类。本文以 Ruff 仓库中 ty(ty_python_semantic 类型检查器)的 Markdown 测试文档 [new_

gitblog_00245的博客 798

嵌入式 C 编程必备(7):const 关键字 —— 打造稳定的常量空间

在嵌入式 C 编程领域,代码的稳定性、可靠性和资源的有效利用至关重要。而const关键字就像是一位忠诚的守护者,为常量数据提供了安全稳定的栖息之所,帮助程序员避免许多潜在的错误,同时优化代码的性能和可读性。

byte轻骑兵的技术小窝 8005
上一篇: 深入剖析联合体位域对齐机制:工程师必须掌握的底层知识(仅限专业人士)
下一篇: Python重试机制实战(装饰器+退避策略大揭秘)
fastdebug
博客等级 码龄11年 149粉丝 2006原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值