跳转到主内容
极星编程网:以代码为星,赴技术山海!

C++怎么调用函数_C++函数使用教程【入门】

C++禁止用户使用以下划线开头加字母或双下划线命名的标识符,因其为编译器和标准库保留,违者导致未定义行为;应采用snake_case或camelCase命名,避免\_开头、双下划线及下划线加大写字母组合。 C++ 里没有
函数_
这种语法,所有下划线开头的标识符(尤其是双下划线或以下划线加大写字母开头)都是保留给编译器和标准库的,你自己定义或调用时用它,属于未定义行为——轻则编译警告,重则运行时崩溃或优化出错。 为什么不能写
函数_
或
_myfunc
这是 C++ 标准硬性规定:
_
开头 + 大写字母(如
_Func
)、或连续两个下划线(如
__func
)的名称,任何作用域下都禁止用户使用。标准库头文件(比如
)大量依赖这类命名做内部实现,你一撞上,就可能: 链接时报
multiple definition
或符号冲突 开启
-O2
后函数被莫名内联/优化掉 在不同平台(Linux/macOS/MSVC)表现不一致,本地能跑,CI 上挂 记住:不是“不推荐”,是“不准用”。 怎么安全地命名和调用自定义函数 直接用小写字母+下划线(
snake_case
)或驼峰(
camelCase
),避开所有以
_
开头的组合: ✅ 推荐:
calculate_total
、
loadConfig
、
is_valid_input
❌ 绝对避免:
_init
、
__parse
、
_MyClass
、
__LINE__
(后者是宏,但你自己别模仿) ⚠️ 特别注意:类成员变量也别用
_member
,虽然有些项目这么用,但和标准库头里的
_M_impl
类似,容易在模板实例化时引发 ODR 违规 调用时就是普通函数调用,没特殊语法:
int result = calculate_total(data);
遇到
undefined reference to `_foo'
怎么快速定位 这个错误八成不是链接问题,而是你误用了保留名,导致声明和定义实际没对上: 检查头文件里是否写了
extern "C" void _process();
,而实现文件里写了
void process() { ... }
(漏了下划线) 用
nm -C your_object.o | grep _process
看符号是否存在;如果输出为空,说明编译器根本没把它当你的函数处理 在 GCC/Clang 下加
-Wreserved-identifier
(Clang 默认开,GCC 需显式加),能提前报出这类命名警告 别急着改链接脚本或加
-lxxx
,先搜代码里所有
_
开头的函数名。 真正麻烦的不是语法会不会,是这些名字看起来“好像能用”,等项目大了、跨平台了、开了 LTO,才突然崩——那时再查,得翻好几层模板展开和预处理结果。 C知道 CSDN推出的一款AI技术问答工具 下载

相关文章