多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

C程序能调用extern “C“声明的带默认参数的C++函数吗?

C程序能调用extern “C“声明的带默认参数的C++函数吗? 问题场景C函数带默认参数并用extern C导出为动态库C程序能否直接调用并享受默认参数// mylib.cpp extern C void foo(int a, int b 0) { /* ... */ }C程序试图只传一个参数foo(42);—— 这是错误的。快速实验编译动态库g -shared -fPIC mylib.cpp -o libmylib.so导出符号为foonm -D可见链接没问题。C程序调用单参数版本编译链接通过但运行时崩溃因为C编译器不会补全默认参数调用栈/寄存器混乱。根本原因•extern C只保证符号名兼容链接层面。• 默认参数是C编译期的特性编译器在调用点自动补全参数但二进制中不存在“默认值”信息。•C编译器完全不知道默认参数只按声明生成调用参数数量不匹配导致未定义行为。
返回列表