V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ksc010
V2EX  ›  C++

看到一些 C++ 或者 C#项目 驼峰和下划线一块用,为啥泥?

  •  
  •   ksc010 · 1 天前 · 1972 次点击
    比如 void Function_Name();
    第 1 条附言  ·  16 小时 55 分钟前
    有一个是台湾的一个工控项目
    有一个是 B 站上看到的一个嵌入式项目
    20 条回复    2025-09-18 09:26:41 +08:00
    davehandong
        1
    davehandong  
       21 小时 0 分钟前
    C++里面驼峰或者 pascal 命名一般变量。下划线大写命名常量、宏。
    mogg
        2
    mogg  
       20 小时 51 分钟前
    可能是自动生成代码 ,module_name
    NightFlame
        3
    NightFlame  
       20 小时 45 分钟前
    哪个项目?
    我都是:
    私有变量 _myName
    私有局部变量 myName
    公开变量 MyName
    Thymolblue
        4
    Thymolblue  
       20 小时 9 分钟前
    std 是下划线,Qt 是大小驼峰,Win32 API 纯大驼峰。混在一起就乱了。
    pulutom40
        5
    pulutom40  
       20 小时 0 分钟前 via iPhone   ❤️ 1
    你就说能不能用吧,是影响你下个月工资了还是影响程序性能了还是编译器编译不过了?
    qW7bo2FbzbC0
        6
    qW7bo2FbzbC0  
       19 小时 30 分钟前
    纯 c# 项目用推荐风格的话是不存在这种

    像楼上说的有可能是 Win32 API 的历史问题

    也有可能是其他语言刚转过来
    son012
        7
    son012  
       19 小时 19 分钟前
    用 qt ,go 你说我为啥混用,go 喜欢驼峰,qt 喜欢下划线,两个要一起写,写着写着你都忘记该用那个了
    kevinxzhao
        8
    kevinxzhao  
       19 小时 12 分钟前
    没有规范,或者没那么强。
    gullitintanni
        9
    gullitintanni  
       17 小时 25 分钟前
    不同项目有不同的代码风格约定,只要整个项目保持一致就没什么问题

    我现在正在维护的公司屎山代码,变量命名里还带着类型信息,比如 iTotalCount ,charpUserName ,看着非常难受,但也能理解当初他们为什么要这么做
    MrKrabs
        10
    MrKrabs  
       17 小时 20 分钟前
    看心情
    lujiaxing
        11
    lujiaxing  
       17 小时 3 分钟前   ❤️ 1
    多正常. 有好多 CShaper 都是 C/C++ 转过来的, 代码风格里带有强烈的 C/C++ 痕迹. 这都不是最离谱的
    最离谱的是我曾经在某公司的代码里看到

    ``namespace com.xxx.xxx.SomeNameSpace.Xxxx``

    这种写法..

    见到真是一口老血都喷出来了.
    hefish
        12
    hefish  
       16 小时 32 分钟前
    不为啥,leader 要求这么用。 现有代码都这么用。
    geelaw
        13
    geelaw  
       15 小时 46 分钟前 via iPhone
    FooFoo_BarBar 这种在 C# 最常见的是自动生成的事件处理器的方法名,比如 Form_Resized 通常是 this 作为 Form 类上的 Resized 事件,又比如 btnOk_Click 是 this.btnOk 对象的 Click 事件。在 C# 第二常见的是 COM 接口重名方法自动映射的消歧义名字,比如 IFace1 有 HRESULT Method(ULONG *result) 而 IFace2 有 HRESULT Method(SHORT *result),那么同时实现 IFace1 和 IFace2 的 COM 对象就会具有 uint IFace1_Method() 和 short IFace2_Method()。这种 COM 改名方法对于用 C 语言访问 COM 也适用。

    可以认为 _ 起到一个 :: (C++) 或者 . (C#) 的作用。
    liuliuliuliu
        14
    liuliuliuliu  
    PRO
       15 小时 37 分钟前
    @geelaw 这个正解,C#里加下划线都是自动生成的代码,如果是手工写的还有下划线的,那就是 c 语言转过来的人,哈哈
    w568w
        15
    w568w  
       13 小时 51 分钟前
    @gullitintanni > 变量命名里还带着类型信息,比如 iTotalCount ,charpUserName

    这个是标准的匈牙利命名法,主要是在前 IDE 时代用的。当时没有很好的代码智能提示,所以相比每次用一个变量都需要找到它的 declaration ,能从变量名里直接读出类型显然更方便。现在有时写代码我也用 g_ 标识全局变量、s_ 标识静态变量、k_ 标识常量。
    geelaw
        16
    geelaw  
       13 小时 41 分钟前 via iPhone
    @w568w #15 iTotalCount 是错误的匈牙利命名法,匈牙利命名法里的“类型”信息不是存储类型而是含义类型,比如 cbStruct 和 cchOutput 才是正确的,uStruct 和 uOutput 则是错误的。

    cb = Count of Bytes
    cch = Count of CHars
    u = Unsigned
    w568w
        17
    w568w  
       13 小时 28 分钟前
    @geelaw 你说的是「匈牙利应用命名法」,我说的是「系统匈牙利命名法」。都属于匈牙利命名。

    ref: https://zh.wikipedia.org/wiki/%E5%8C%88%E7%89%99%E5%88%A9%E5%91%BD%E5%90%8D%E6%B3%95
    maymay5
        18
    maymay5  
       12 小时 46 分钟前 via iPhone
    C#命名规范我见的最多的:函数、类名用大坨峰;局部变量名用小坨峰;常量、静态变量、全局变量用全大写➕下划线断词代替空格,数据库表名用纯小写用下划线断词代替空格;依赖注入用小坨峰前置一个下划线
    bbbblue
        19
    bbbblue  
       11 小时 55 分钟前
    我看 UE 似乎就是这样 不过他还把类型都带上 比如 BP_Player 😂(玩家蓝图)
    INCerry
        20
    INCerry  
       3 小时 48 分钟前
    C# 官方推荐的风格只有一种,也就是现在.NET BCL 的风格,其它的就看个人习惯和团队规范了,我还见过 java 用下划线分割的呢
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:14 · PVG 13:14 · LAX 22:14 · JFK 01:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.