看到一些 C++ 或者 C#项目 驼峰和下划线一块用,为啥泥? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ksc010
V2EX    C++

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

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

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

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

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

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

    这种写法..

    见到真是一口老血都喷出来了.
    hefish
        12
    hefish  
       22 天前
    不为啥,leader 要求这么用。 现有代码都这么用。
    geelaw
        13
    geelaw  
       22 天前 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
       22 天前
    @geelaw 这个正解,C#里加下划线都是自动生成的代码,如果是手工写的还有下划线的,那就是 c 语言转过来的人,哈哈
    w568w
        15
    w568w  
       22 天前
    @gullitintanni > 变量命名里还带着类型信息,比如 iTotalCount ,charpUserName

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

    cb = Count of Bytes
    cch = Count of CHars
    u = Unsigned
    w568w
        17
    w568w  
       22 天前
    @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  
       21 天前 via iPhone
    C#命名规范我见的最多的:函数、类名用大坨峰;局部变量名用小坨峰;常量、静态变量、全局变量用全大写下划线断词代替空格,数据库表名用纯小写用下划线断词代替空格;依赖注入用小坨峰前置一个下划线
    bbbblue
        19
    bbbblue  
       21 天前
    我看 UE 似乎就是这样 不过他还把类型都带上 比如 BP_Player (玩家蓝图)
    INCerry
        20
    INCerry  
       21 天前
    C# 官方推荐的风格只有一种,也就是现在.NET BCL 的风格,其它的就看个人习惯和团队规范了,我还见过 java 用下划线分割的呢
    anewbing
        21
    anewbing  
       21 天前
    哈哈 不要纠结这些 这些不是问题的关键
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1938 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:12 PVG 00:12 LAX 09:12 JFK 12:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86