当前位置: 首页 > news >正文

网站的弹窗对话框怎么做英文网站建设580

网站的弹窗对话框怎么做,英文网站建设580,深圳4a广告公司有哪些,上市网络公司排名文章目录 前言没有警告不代表没有问题目前的应对方法 前言 很久没写了,水一篇。 最近有个代码在gcc 4.8.5上编译失败。编译失败的提示是: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werrorstrict-aliasing]查了下…

文章目录

    • 前言
    • 没有警告不代表没有问题
    • 目前的应对方法

前言

很久没写了,水一篇。

最近有个代码在gcc 4.8.5上编译失败。编译失败的提示是:

error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]

查了下这个报错,有点复杂。大体是不要使用一个类型的指针,去操作另一种指针指向的空间。比如下面这样:

#include <inttypes.h>
#include <stdio.h>struct internet {__uint16_t ip;
};__uint8_t address[10];int main(int argc, char *argv[]) {address[0] = 1;address[1] = 2;struct internet *net = (struct internet *)address;__uint16_t ip = net->ip;printf("%" PRIu8 "\n", address[0]);printf("%" PRIu8 "\n", address[1]);printf("%" PRIu16 "\n", ip);
}

然而,上面这段代码在不同的gcc 11.4.1版本下编译,没有问题。

关于Strict Aliasing Rule的详细解释见:What is the Strict Aliasing Rule and Why do we care?、c when would you not want to use strict aliasing?

我也没有完全搞懂。下面示例,来自这个链接。


没有警告不代表没有问题

下面我们来看下这个示例。在常见的gcc版本下编译,都能复现。

#include <iostream>int foo(float *f, int *i) {*i = 1;*f = 0.f;return *i;
}int main() {int x = 0;std::cout << x << std::endl; // Expect 0int x_ret = foo(reinterpret_cast<float *>(&x), &x);std::cout << x_ret << "\n";  // Expect 0?std::cout << x << std::endl; // Expect 0?
}

首先,我们编译的时候不要开启优化,输出如下:

g++ -O0 demo-2.cpp -o demo-20
0
0

接着,我们编译的时候开启优化,输出如下:

g++ -O2 demo-2.cpp -o demo-20
1
0

这就比较脑壳痛了。日常开发编译的是debug版本,它没有优化。发布的时候,编译的是release版本,它有一定的编译优化。然后相同的代码,debug和release版本的运行不同。这个问题可能就很难排查。

为什么会出现这种情况?编译器也没有给出警告?

大概是因为优化的时候,编译器看到要返回的是i,和f又没有什么关系,给返回寄存器里面提前填入了i的值。


目前的应对方法

一般来说,日常编程中,即使不同类型的指针,操作相同的内存,也不会出现上面这种情况。所以正常使用就好,不用特地回避,出问题再解决问题。(为什么不事先回避这个问题呢?因为搞不清,那就先不管。)

如果遇到上面这种问题,或者因为这个问题编译失败,怎么办呢?

  • 第一种方法是:使用memcpy进行拷贝,不要直接使用不同类型的指针,操作相同的内存。
  • 第二种方法是:在gcc的构建选项中添加-fno-strict-aliasing选项。但是这会导致整个构建过程都忽略了这个限制。
  • 第三种是,可以尝试下使用__attribute__((optimize("-fno-strict-aliasing")))修饰函数,但是这不一定有效。
http://www.yayakq.cn/news/703687/

相关文章:

  • 聊城做网站的公司信息网页制作基础教程背景图片
  • 一个人搞得定网站建设做网站设计
  • 自创网站的软件下载企业网站 静态页面
  • 建立网站需要哪些东西南京注册公司流程
  • 南通优普高端网站建设做购实惠网站的意义
  • 公司该建哪种网站免费高清短视频素材库
  • 网站建设是如何寻找客户的wordpress如何添加注册按钮
  • 个人主页网站制作网站备案文件
  • 学网站建设与管理好吗怎么做商务网站的架构
  • 西安网站制作资源wordpress备案
  • 网站建设工作室07fly90设计赚钱
  • 官方网站建设合作协议seo是指搜索引擎优化
  • 英文网站建设哪家强西安市建设工程交易网
  • 电子商务的网站的建设内容广州线下培训机构停课
  • 网站建设服务器软件小型个人网站制作
  • 站长工具a级wordpress seo设置
  • 豆各庄做网站的公司龙岩新增病例行动轨迹
  • 赣州网站建设优化服务房屋室内装修设计
  • 哪个网站可以做头像湖南网站搜索排名优化电话
  • 给房地产公司做网站的公司网站负责人
  • 网络创作网站做公司网站需要多少钱
  • 医疗网站建设教程新产品上市推广策划方案模板
  • 给别人做彩票网站违法吗搬家公司需要多少钱
  • 青岛专业网站建设公司教育集团网站建设的目的
  • 做网站怎样收费的wordpress 4.5.2改语言
  • 网站上的产品板块wordpress显示产品类别
  • 上海网站se0优化公司wordpress 看不到图
  • 网站建立的链接不安全怎么解决wordpress免费申请
  • 网站后台根据前端做吗wordpress文章不显示作者
  • 广州市建设交易中心网站首页福甭市建设局网站