`

c++ - unnamed namespace to replace the static symbols

    博客分类:
  • c++
c 
阅读更多

C++ supports a construct that is called unnamed namespace.  with unnamed namespace, one can declare entity local to a file. 

 

 

First let's see an example that uses unnamed namespace.

 

 

/**
* @Name
*   main.cpp
* @Summary
*   Test that unnamed (anonymous) namespace can be used in lieu of static something in C (some local scope construct)
* @NOTE
*  this is a test cpp source file 
*/

#include <iostream>
using namespace std;

namespace {
	void f() { 
		cout << "inside f() " << endl;
	}
}

int main(int argc, char* argv[])  
{
    f();
}
 

 

 

to test that the function only have local visiblity, we can write a new lib.cpp file 

 

 

 

/**
* @Name
*  lib.cpp
* @Comment:
*   use an external symbol, which is f(), there is a local f symbol defined in the main.cpp file
* you are suppose to get the following compile error or similar (depends on the implementation of the compiler)
*   unresolved symbols: 
*     void __cdecl f(void) (?@@YAXXZ)
*   
*/
extern void f();

void g()
{
	f();
};
 

 

as you can see, it has the same semantic of the following 

 

 

 

static void f() 
{
	cout << "inside f()" << endl;
}
 

 

 

 

 

 

分享到:
评论

相关推荐

    hexo-theme-unnamed:Hexo 主题

    【Hexo 主题详解:hexo-theme-unnamed】 Hexo 是一款流行的静态博客框架,以其简洁、高效的特性深受开发者喜爱。在众多的 Hexo 主题中,"hexo-theme-unnamed" 是一个经过修改的版本,为用户提供了一种独特的视觉...

    Ja-netfiter-2022.2.0 主要更新对 jdk 17的兼容

    jdk 17需要 新增 配置 如下 jvm参数 --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED --add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED

    Google C++ Style Guide(Google C++编程规范)高清PDF

    Parameters to C/C++ functions are either input to the function, output from the function, or both. Input parameters are usually values or const references, while output and input/output parameters ...

    Google C++ Style Guide_英文版.pdf

    - **Unnamed Namespaces and Static Variables:** Unnamed namespaces can be used to create implicitly static local variables that are visible only within the translation unit. - **Non-member, Static ...

    The-UnNamed-MagicMod:一个未命名的 Minecraft 魔法模组,非常棒

    今天我们要介绍的是"The-UnNamed-MagicMod",一个未被正式命名的魔法模组,它为玩家带来了全新的魔法元素,让冒险旅程更加丰富多彩。 首先,让我们深入了解一下这个模组的核心特色。"无名魔法模组"并非只是一个简单...

    手机原型风格html页面多个

    首先,登录页面是任何应用程序或网站的重要组成部分。... ...主页是用户访问网站时首先看到的部分,通常包含网站的核心内容和导航菜单。...主页可能还包含轮播图、推荐内容、侧边栏和广告等元素,这些都可以通过CSS3实现...

    project-unnamed

    尽管描述部分为空,但从文件名"project-unnamed-master"来看,这很可能是从某个版本控制系统(如Git)中克隆或下载的一个项目仓库的主分支。在C#开发中,这样的命名通常表示这是一个未命名的项目,并且是项目的主...

    org.objectweb.lomboz-R-3.2-200610201336

    org.objectweb.lomboz-R-3.2-200610201336

    C++工程实践经验谈

    匿名namespace(也称为unnamed namespace)是C++语言提供的一种特性,主要用于确保在某个特定编译单元(通常是`.cpp`文件)中定义的标识符(如变量、函数等)具有唯一的全局名称空间,从而避免与其他编译单元中的...

    javafx-contact-app:用Java FX制作的简单联系人应用程序

    将以下VM参数添加到IDE中的构建配置中: --module-path“ [PATH-TO-YOUR-JAVAFX-SDK-VERSION] / lib” --add-modules = javafx.controls,javafx.fxml,javafx.web --add-reads javafx.graphics =全部取消命名--add...

    unname-css-framework:一个简单的彩色CSS框架

    npm install --save unnamed 纱 yarn add unnamed CDN &lt;link rel="stylesheet" href="https://unpkg.com/unnamed" /&gt; 文献资料 发展历程 对于网络应用 Npm $ npm install --save unnamed 纱 $ yarn add ...

    mail-client:使用JavaMail的邮件客户端

    然后,您需要使用以下命令将VM选项添加到项目中: --module-path [path lib JavaFX] --add-modules=javafx.swing,javafx.graphics,javafx.fxml,javafx.media,javafx.web --add-reads javafx.graphics=ALL-UNNAMED --...

    Unnamed - 29746.rar

    标题中的“Unnamed - 29746.rar”是一个压缩包文件,可能包含了与医学成像相关的数据。这种类型的文件通常用于存储大量的图像或数据,便于传输和存储。RAR是一种流行的压缩格式,它能有效地压缩文件,减少磁盘空间...

    Unnamed-RPG-开源

    《Unnamed-RPG:开源角色扮演游戏开发的利器》 在当今的游戏开发领域,开源软件已经成为创新和技术进步的重要推动力。"Unnamed-RPG-开源"项目正是这样一款致力于为开发者提供工具,帮助他们构建具有Rolemaster风格...

    Exploring C++ 11

    ### Exploring C++ 11 #### 知识点概览 《Exploring C++ 11》第二版是一本全面介绍C++ 11新特性和编程实践的书籍。本书通过一系列“探索”(Explorations)的形式,循序渐进地介绍了C++ 11的各种核心概念和技术...

    详解在C++中显式默认设置的函数和已删除的函数的方法

    在 C++11 中,默认函数和已删除函数使你可以显式控制是否自动生成特殊成员函数。已删除的函数还可为您提供简单语言,以防止所有类型的函数(特殊成员函数和普通成员函数以及非成员函数)的参数中出现有问题的类型...

    C++语言特性的性能分析.pdf

    C++语言是一种高效的编程语言,广泛应用于系统/应用软件开发、游戏开发、实时物理仿真等领域。本文档分析了C++语言的性能特点,涵盖了内存管理、对象构造与析构、输入输出性能等关键要素。 1. 内存管理:文档提到了...

    积分管理系统java源码-eladmin:根据原eladmin项目进行改造。整合ELK、ShardingSphere多数据源、多Redis、消

    java.base/java.lang=ALL-UNNAMED -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar eladmin-starter-2.6.10.jar &gt;nohup.out 2&gt;&1 & 若外置依赖启动参数需添加。外置依赖可以大大减少jar...

    jmonkeybuilder:jMonkeyBuilder

    jMonkeyBuilder 1.8.0它是3D编辑器,用于为jMonkeyEngine 3.2准备/工作/创建图形内容Java编译器选项--add-exports javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED --add-exports javafx.graphics/...

Global site tag (gtag.js) - Google Analytics