C++ 相同作用域的函数和变量不可同名

C++ 全局函数与全局变量不可同名
  • C++中相同作用域的函数和变量不可同名
// 编译报错
int a = 10;
void a(){ // some code}
  • 某日,在Chromium源码中看到如下代码。咋一看,以为函数与变量同名了,但是编译时没有错误。
// xxx.cpp文件

extern "C" {
static AwDrawGLFunction DrawGLFunction;
static void DrawGLFunction(long view_context,
                           AwDrawGLInfo* draw_info,
                           void* spare) {
  // |view_context| is the value that was returned from the java
  // AwContents.onPrepareDrawGL; this cast must match the code there.
  reinterpret_cast<android_webview::RenderThreadManager*>(view_context)
      ->DrawGL(draw_info);
}
}
  • 开始时,BZ以为难道C++14,允许相同作用域的函数与变量同名了???于是在谷歌上搜了很久,发现并没有类似的资料。自己也写类似的代码,编译时,肯定会报错。
  • 其实,上述代码时完全正确的。因为AwDrawGLFunction,是函数指针类型。
// AwDrawGLFunction
typedef void (AwDrawGLFunction)(long view_context,
                                AwDrawGLInfo* draw_info,
                                void* spare);
  • 所以上述代码,其实就是先做了函数声明,紧接着函数定义。
// xxx.cpp文件

extern "C" {
// 函数声明
static AwDrawGLFunction DrawGLFunction;
// 函数定义
static void DrawGLFunction(long view_context,
                           AwDrawGLInfo* draw_info,
                           void* spare) {
  // |view_context| is the value that was returned from the java
  // AwContents.onPrepareDrawGL; this cast must match the code there.
  reinterpret_cast<android_webview::RenderThreadManager*>(view_context)
      ->DrawGL(draw_info);
}
}
  • 总结:其实BZ想说,看代码时,一定要看仔细了。犯这种错误,不仅耽误了时间,还容易让牢记的知识变得混淆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值