当前位置: 首页 > news >正文

找南阳建立网站的公司wordpress彻底禁用google

找南阳建立网站的公司,wordpress彻底禁用google,网站建设捌金手指下拉一,南皮网站建设公司一、基本概念作用域(Scope): 全局作用域:定义在所有函数外部的变量或函数,具有文件作用域,生命周期为整个程序运行期间。局部作用域:定义在函数、块(如 {})或类内部的变量…

一、基本概念

  1. 作用域(Scope)

    • 全局作用域:定义在所有函数外部的变量或函数,具有文件作用域,生命周期为整个程序运行期间。
    • 局部作用域:定义在函数、块(如 {})或类内部的变量或函数,作用域限于定义的块,生命周期通常为块执行期间(除非用 static 修改)。
  2. 链接(Linkage)

    • 外部链接(External Linkage):符号(如变量或函数)在整个程序中可见,可被其他源文件访问。
    • 内部链接(Internal Linkage):符号仅在当前源文件中可见。
    • 无链接(No Linkage):符号仅在定义的作用域内可见(如局部变量)。
  3. 关键字作用

    • extern:声明变量或函数具有外部链接,定义在其他地方。
    • static:修改变量或函数的链接和生命周期,行为因作用域不同而变化。
    • inline:主要用于函数,建议编译器内联函数体;C++11 后也可用于变量,控制多文件定义。

二、关键字在全局和局部作用域的区别

1. extern 变量
全局作用域
  • 定义

    • 声明:extern int myVar;(不分配存储,仅声明)。
    • 定义:int myVar = 42;(分配存储,初始化)。
    • extern 用于声明变量在其他源文件定义,允许跨文件共享。
  • 特性

    • 链接:外部链接,变量在整个程序中唯一,多个文件可访问。
    • 生命周期:程序整个运行期间(全局变量默认静态存储)。
    • 初始化:如果定义时未初始化,默认值为 0。
    • 单一定义规则(ODR):只能在一个源文件中定义,其余文件用 extern 声明。
  • 示例

    // global.h
    #ifndef GLOBAL_H
    #define GLOBAL_H
    extern int globalVar; // 声明
    #endif
    
    // global.c
    #include "global.h"
    int globalVar = 42; // 定义
    
    // main.c
    #include "global.h"
    #include <stdio.h>
    int main() {printf("%d\n", globalVar); // 输出 42globalVar = 100; // 修改全局变量return 0;
    }
    
    gcc -o program main.c global.c
    
  • 行为

    • globalVarglobal.c 中定义,存储分配在全局数据段。
    • main.c 通过 extern 访问同一变量,修改会反映到所有文件中。
局部作用域
  • 定义

    • 在函数或块内使用 extern 声明变量,引用全局变量。
    • 不能在局部作用域定义 extern 变量(因为 extern 不分配存储)。
  • 特性

    • 链接:仍为外部链接,引用全局作用域的变量。
    • 生命周期:全局变量的生命周期(程序运行期间)。
    • 作用域:声明所在的块,但引用全局变量的实际作用域是全局。
  • 示例

    // global.c
    int globalVar = 42; // 全局定义
    
    // main.c
    #include <stdio.h>
    void func() {extern int globalVar; // 引用全局变量printf("%d\n", globalVar); // 输出 42globalVar = 100;
    }
    int main() {func();printf("%d\n", globalVar); // 输出 100return 0;
    }
    
  • 行为

    • extern int globalVar;func 内声明,引用全局变量。
    • 修改 globalVar 影响全局,所有引用它的地方看到相同值。
  • 注意

    • 局部 extern 声明仅用于明确引用全局变量,通常不必要(直接使用全局变量名即可)。
    • 不能在局部作用域初始化 extern 变量(如 extern int x = 10; 会报错)。
    • 局部定义的变量会随着作用域的结束,而在当前文件中失去名称。
使用场景
  • 全局:跨文件共享全局变量(如配置参数、状态变量)。
  • 局部:显式声明引用全局变量(较少使用,通常直接访问)。

2. static 变量
全局作用域
  • 定义

    • static int myVar = 42;(定义并初始化,分配存储)。
  • 特性

    • 链接:内部链接,仅在当前源文件可见,其他文件无法通过 extern 访问。
    • 生命周期:程序整个运行期间(静态存储)。
    • 初始化:未初始化时默认值为 0,仅初始化一次。
    • 作用域:文件作用域,限制在定义的源文件。
  • 示例

    // file1.c
    static int globalStatic = 42; // 内部链接,仅 file1.c 可见
    void printStatic() {printf("%d\n", globalStatic);
    }
    
    // file2.c
    #include <stdio.h>
    // extern int globalStatic; // 错误:无法访问 file1.c 的 static 变量
    void printStatic(); // 可以访问函数
    int main() {printStatic(); // 输出 42return 0;
    }
    
    gcc -o program file1.c file2.c
    
  • 行为

    • globalStatic 只在 file1.c 中定义和访问。
    • file2.c 无法通过 extern 访问 globalStatic,但可调用 printStatic 函数。
局部作用域
  • 定义

    • static int myVar = 42;(在函数或块内定义)。
  • 特性

    • 链接:无链接,仅在定义的块内可见。
    • 生命周期:程序整个运行期间(静态存储),而不是块的生命周期。
    • 初始化:仅初始化一次,值在多次调用间保留。
    • 作用域:限于定义的块(如函数内部)。
  • 示例

    #include <stdio.h>
    void counter() {static int count = 0; // 静态局部变量,初始化一次count++;printf("Count: %d\n", count);
    }
    int main() {counter(); // 输出 Count: 1counter(); // 输出 Count: 2counter(); // 输出 Count: 3return 0;
    }
    
  • 行为

    • count 在第一次调用时初始化为 0,存储在静态数据段。
    • 后续调用保留 count 的值,递增后保持状态。
    • 外部无法访问 count(无链接)。
使用场景
  • 全局:限制变量只在当前源文件使用(如模块私有变量)。
  • 局部:需要保留值的局部变量(如计数器、状态机)。

3. inline(变量和函数)
背景
  • 在 C 中,inline 仅用于函数,建议编译器内联函数体。
  • 在 C++ 中,inline 可用于函数和变量(C++17 起),但 inline 变量较少见。
  • 以下分别讨论 inline 函数和 inline 变量。
全局作用域 - inline 函数
  • 定义

    • inline void myFunction() { ... }(建议内联)。
  • 特性

    • 链接:外部链接,但允许多个定义(只要定义一致)。
    • 行为
      • 编译器可能将函数调用替换为函数体,减少调用开销。
      • 在 C 中,inline 函数需配合 staticextern 明确链接:
        • static inline:内部链接,每个源文件有独立副本。
        • inline(C99):需要一个非 inline 定义支持。
      • 在 C++ 中,inline 函数默认允许多文件定义,链接器合并为单一实现。
    • 初始化:不适用(函数无初始化)。
  • 示例(C++):

    // header.h
    #ifndef HEADER_H
    #define HEADER_H
    inline int add(int a, int b) { return a + b; }
    #endif
    
    // file1.cpp
    #include "header.h"
    #include <iostream>
    void printAdd() { std::cout << add(2, 3) << "\n"; }
    
    // file2.cpp
    #include "header.h"
    #include <iostream>
    int main() { std::cout << add(2, 3) << "\n"; return 0; } // 输出 5
    
    g++ -o program file1.cpp file2.cpp
    
  • 行为

    • add 在头文件中定义,多个源文件包含不会导致重复定义错误。
    • 编译器可能内联 add,提高性能。
全局作用域 - inline 变量(C++17 起)
  • 定义

    • inline int myVar = 42;(定义并初始化)。
  • 特性

    • 链接:外部链接,允许多个定义(必须一致)。
    • 生命周期:程序整个运行期间。
    • 初始化:必须初始化,且所有定义的初始化值相同。
    • 作用:解决头文件中定义全局变量的重复定义问题。
  • 示例

    // header.h
    #ifndef HEADER_H
    #define HEADER_H
    inline int globalInline = 42;
    #endif
    
    // main.cpp
    #include "header.h"
    #include <iostream>
    int main() {globalInline = 100;std::cout << globalInline << "\n"; // 输出 100return 0;
    }
    
    // other.cpp
    #include "header.h"
    #include <iostream>
    void printInline() { std::cout << globalInline << "\n"; }
    
  • 行为

    • globalInline 在头文件中定义,多个文件包含不会导致重复定义错误。
    • 所有文件共享同一变量,修改全局生效。
局部作用域 - inline 函数
  • 定义
    • 在函数或块内定义 inline 函数(较少见,通常全局定义)。

    • 示例:

      void outer() {inline int add(int a, int b) { return a + b; } // C++ 中合法但罕见printf("%d\n", add(2, 3));
      }
      
  • 特性
    • 链接:无链接,仅在块内可见。
    • 行为:建议内联,但作用域受限,外部无法访问。
  • 注意:局部 inline 函数用途有限,通常用于小型工具函数。
局部作用域 - inline 变量
  • 限制:C++ 不允许在局部作用域定义 inline 变量。
  • 原因inline 变量设计用于全局作用域,解决多文件定义问题,局部变量无需此功能。
使用场景
  • 全局 inline 函数:头文件中定义小函数(如 getter/setter),避免重复定义。
  • 全局 inline 变量:C++17 后,用于共享常量或全局状态。
  • 局部 inline 函数:罕见,用于块内优化小型函数。

三、对比总结

关键字作用域链接生命周期初始化行为使用场景
extern 变量全局外部链接程序运行期间定义时可初始化,默认 0声明引用其他文件定义的变量跨文件共享全局变量
extern 变量局部外部链接(引用全局)程序运行期间不可初始化引用全局变量显式引用全局变量(少用)
static 变量全局内部链接程序运行期间默认 0,仅一次限制在当前文件模块私有变量
static 变量局部无链接程序运行期间默认 0,仅一次值在块间保留计数器、状态保留
inline 函数全局外部链接(允许多定义)N/AN/A建议内联,头文件定义小函数优化
inline 函数局部无链接N/AN/A块内内联局部小型函数(罕见)
inline 变量全局外部链接(允许多定义)程序运行期间必须初始化头文件定义共享变量C++17 全局常量
inline 变量局部不支持N/AN/AN/A不适用

四、注意事项

  • ODR 合规性externinline 变量必须遵守单一定义规则,避免重复定义。

  • 调试:高优化(如 -O2)可能影响 externstatic 变量的调试,建议用 -Og

  • C vs C++

    • C 不支持 inline 变量,仅 inline 函数。
    • C++ 的 inline 变量和函数更灵活,适合头文件定义。
  • 编译命令

    g++ -std=c++17 -O2 -o program main.cpp other.cpp
    

五、总结

  • extern 变量
    • 全局:跨文件共享,外部链接,需单独定义。
    • 局部:引用全局变量,较少使用。
  • static 变量
    • 全局:内部链接,限制文件访问。
    • 局部:无链接,值保留,适合状态保持。
  • inline
    • 函数(全局/局部):建议内联,C/C++ 通用。
    • 变量(全局,C++17):允许多定义,适合头文件常量。
    • 局部变量不支持。
http://www.dtcms.com/a/483693.html

相关文章:

  • WHAT - 前端动画的前世今生
  • 技术视界 | 破解“1+1>2”的难题:多机器人系统的协同挑战与前沿突破
  • PPT宏代码
  • asp.net网站开发全过程淘宝客网站开发教程
  • 无锡网站优化推广东莞模板网站设计
  • 高级网站开发工程师什么是云速建站服务
  • 建动画网站需要多少钱德阳企业网站建设
  • SpringBootTest运行线程池被拒绝
  • 百度快照和做网站有关系吗企业网站网站建设电话
  • 高港做网站专业网站建设新闻
  • 网页网站设计公司排行榜高端网站创建
  • 工业时序数据分析:波动情况
  • 脚本三合一:设备监控+文档筛选+UUID重命名
  • 数据结构——哈希(自定义hashMap实现、解决哈希冲突、拉链寻址Java实现)
  • 电力电子技术 第二章——稳态分析
  • 湛江做网站苏州厂商如何备案成企业网站
  • 德州极速网站建设小程序网站登录验证码显示不出来
  • PT2000 Dev Studio产生的微码解析一-Channel 1
  • 笔试强训(二)
  • 专业全网推广建站公司网站正能量视频不懂我意思吧
  • Pixel-Perfect:生成像素级深度细节深度提升
  • 如何利用网站赚钱建立网站的公司
  • Java字节码与流量回放
  • 网站开发与设计作业网站全屏轮播怎么做
  • ceph 之跳过监控栈 --skip-monitoring-stack
  • wordpress添加表情合肥建站公司seo
  • 网站建设公司 关于我们目录更新 wordpress
  • 有专门做网站的吗wordpress上看图片慢
  • 2345浏览器网站进入做网站阿里巴巴好还是百度好
  • 云计算平台的技术安全需求主要分为“端-管-云”三个部分