offset_offsetof - CSDN
精华内容
参与话题
  • offset的属性的介绍

    千次阅读 2018-03-06 20:29:03
    在获取元素的高宽等属性时,Dom提供了这些API提供给我们下面进行介绍(只能查看,无法修改,修改用 .style.css):这是我创建的样例,方便查看.box{ position: absolute; left: 100px; top: 100px;...

    在获取元素的高宽等属性时,Dom提供了这些API提供给我们下面进行介绍(只能查看,无法修改,修改用 .style.css):


    这是我创建的样例,方便查看

    .box{
                position: absolute;
                left: 100px;
                top: 100px;
                width: 800px;
                height: 300px;
                border: 20px solid #0a9dc7;
            }
            .box p{
                position: absolute;
                left: 50px;
                top: 50px;
                width: 100px;
                height: 100px;
                border: 10px solid deeppink;
            }

    <div class="box">
        <p></p>
    </div>

    现在利用js语言对Dom定义的offset进行测试

    var oBox = document.querySelector(".box");//蓝色边框的盒子
    var oP = document.querySelector(".box p");//粉红色边框的p
    

    1.1.offsetParent

    是指自己祖先元素中,离自己最近的已经定位的元素,如果自己的祖先元素中,没有任何盒子进行了定位,那么offsetParent对象就是body。

    console.log(oP.offsetParent); //<div class="box">...</div>
    1.2.offsetLeft

    一个元素的offsetLeft值,就是这个元素左边框外,到自己的offsetParent对象的左边框内的距离。

    console.log(oP.offsetLeft);//50
    1.3.offsetTop

    一个元素的offsetTop值,就是这个元素上边框外,到自己的offsetParent对象的上边框内的距离。

    console.log(oP.offsetTop);//50
    2.offsetWidth offsetHeight

    offWidth是自己的width+左右padding+左右border的宽度

    offHeight是自己的height+上下padding+上下border的宽度

    console.log(oP.offsetHeight);//120
    console.log(oP.offsetWidth);//120       
    console.log(oBox.offsetHeight);//340
    console.log(oBox.offsetWidth);//840
    3.clientWidth 和 clientHeight

    clientWidth值与offsetWidth区别是width + padding,相比与offsetWidth少计算了border

    clientHeight同样是这样

    4.scrollHeight

    获取元素内容实际高度,也就是内容的实际高度。有没有隐藏都没关系


         p{
                width: 100px;
                height: 100px;
                padding: 50px;
                margin: 10px;
                border: 10px solid deeppink;
                overflow: hidden;//超出部分隐藏
            }
        <p>哈哈哈哈啊哈哈哈哈啊哈哈哈哈哈哈哈哈啊啊啊啊啊啊啊哈哈
            哈哈哈哈啊哈哈哈哈啊哈哈哈哈哈哈哈哈啊啊啊啊啊啊啊哈哈
            哈哈哈哈啊哈哈哈哈啊哈哈哈哈哈哈哈哈啊啊啊啊啊啊啊哈哈
            哈哈哈哈啊哈哈哈哈啊哈哈哈哈哈哈哈哈啊啊啊啊啊啊啊哈哈
        </p>
        var oP  = document.querySelector("p");
        console.log(oP.offsetWidth);//220
        console.log(oP.clientWidth);//200
        console.log(oP.scrollHeight);//449


    展开全文
  • 让你彻底搞懂offset

    千次阅读 2016-10-31 18:27:27
    很多初学者对于JavaScript中的offset、scroll、client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确。 图一  不知道大家看到这张图的第...

    很多初学者对于JavaScript中的offset、scroll、client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确。

    图一

      不知道大家看到这张图的第一感觉如何,反正我的感觉就是“这次第,怎一个乱字了得”。

      既然我认为上图太多太乱,那么我就把offset、scroll、client分开说,希望能让大家彻底弄清楚,今天只说offset。

    一、关于offset,我们要弄明白什么

      w3中offset相关页面是:http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface

      在这里我们可以看到,关于offset共有5个东西需要弄清楚:

      1、offsetParent

      2、offsetTop

      3、offsetLeft

      4、offsetWidth

      5、offsetHeight

      我们根据难易程度把以上5点分为三类来讲解。

      在分析之前,先来看段测试代码:

    <body>
        <style type="text/css">
            body {
                border:20px solid #CCC;
                margin:10px;
                padding:40px;
                background:#EEE;
            }
            #test {
                width:400px;
                height:200px;
                padding:20px;
                background:#F60;
                border:5px solid #888;
            }
        </style>
        <div id="test"></div>
        <script>
            var test = document.getElementById("test");
            test.innerHTML = "<p>Browser:" + navigator.userAgent + "</p>" +
                "<p>offsetWidth:" + test.offsetWidth + "</p>" +
                "<p>offsetHeight:"+test.offsetHeight+"</p>"+
                "<p>offsetLeft:"+test.offsetLeft+"</p>"+
                "<p>offsetTop:"+test.offsetTop+"</p>";
        </script>
    </body>

      这段代码在各个浏览器中的效果如图:

    图二(IE6/7)

     

    图三(IE8/9/10)

     

    图四(Firefox)

     

    图五(Chrome)

    二、offsetWidth与offsetHeight

      大家可以看到,上面图二~图五中的共同点是 offsetWidth与offsetHeight是一致的,因此这里放到地起讲。

      MDN中对offsetWidth的概述和描述是:

    Returns the layout width of an element.

    Typically, an element's offsetWidth is a measurement which includes the element borders, the element horizontal padding, the element vertical scrollbar (if present, if rendered) and the element CSS width.

      也就是元素的可视宽度,这个宽度包括元素的边框(border),水平padding,垂直滚动条宽度,元素本身宽度等。

      offsetHeight跟offsetWidth类似,只是方向改为垂直方向上的。

      只是我们的示例中没有水平和垂直滚动条。另外经过测试可以发现,即使元素加上水平或垂直滚动条,offsetWidth跟offsetHeight的值是不会更改的,因为浏览器渲染时把滚动条的宽度(或高度)算在了元素本身的宽度(或高度)中了。

      通过代码及图中数值,我们不难看出:

      offsetWidth=(border-width)*2+(padding-left)+(width)+(padding-right)

      offsetHeight=(border-width)*2+(padding-top)+(height)+(padding-bottom)

      对这两个概念就总结到这里,大家现在弄明白了吗?

    三、offsetLeft与offsetTop

      offsetWidth与offsetHeight有个特点,就是这两个属性的值只与该元素有关,与周围元素(父级和子级元素无关)。

      然而,offsetLeft与offsetTop却不是这样,这两个属性与offsetParent有关,但在我们讲到offsetParent之前,我们先不管offsetParent是什么及怎么判断,我们只要知道offsetLeft和offsetTop与offsetParent有关就行了,上面的示例中offsetParent就是body。

      MSDN上对offsetLeft的定义是:

    Retrieves the calculated left position of the object relative to the layout or coordinate parent, as specified by the offsetParent property

      也就是返回对象元素边界的左上角顶点相对于offsetParent的左上角顶点的水平偏移量。从这个定义中我们可以明确地知道offsetLeft与当前元素的margin-left和offsetParent的padding-left有关。也就是说应该是:

      offsetLeft=(offsetParent的padding-left)+(中间元素的offsetWidth)+(当前元素的margin-left)。

      offsetTop=(offsetParent的padding-top)+(中间元素的offsetHeight)+(当前元素的margin-top)。

      但通过上面的例子我们可以看到,当offsetParent为body时,对于offsetLeft与offsetTop的值有三种,分别是:IE6/7中的40,IE8/9/10 和 Chrome中的70,以及FireFox中的50。

      通过这些数值我们可以知道,当offsetParent为body时情况比较特殊:

      在IE8/9/10及Chrome中,offsetLeft = (body的margin-left)+(body的border-width)+(body的padding-left)+(当前元素的margin-left)。

      在FireFox中,offsetLeft = (body的margin-left)+(body的padding-left)+(当前元素的margin-left)。

    四、offsetParent

      终于到offsetParent了。

      offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素。 如果这个容器元素未进行CSS定位, 则offsetParent属性的取值为根元素的引用。

      总的来说两条规则:

      1、如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。

      2、如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。

      上面的示例就是第1条说的情况,我们来验证一下:

      我们把JS改为(添加了一行代码:红色部分):

    var test = document.getElementById("test");
    test.innerHTML = "<p>Browser:" + navigator.userAgent + "</p>" +
        "<p>offsetParent:" + test.offsetParent.tagName + "</p>" +
        "<p>offsetWidth:" + test.offsetWidth + "</p>" +
        "<p>offsetHeight:"+test.offsetHeight+"</p>"+
        "<p>offsetLeft:"+test.offsetLeft+"</p>"+
        "<p>offsetTop:"+test.offsetTop+"</p>";

      FireFox下的效果为:

    图六

      在其他浏览器中效果相同,都是body。

      我们再来验证一下第2条,测试HTML如下:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Demo</title>
    </head>
    <body>
        <style type="text/css">
            body {
                margin:0;
                padding:0;
                background:#EEE;
            }
            div,ul,li {
                margin:0;
            }
            li {
                height:20px;
                line-height:20px;
            }
            #test {
                width:400px;
                height:250px;
                padding:20px;
                background:#F60;
                border:10px solid #888;
            }
            #divtest {
                margin:30px;
                position:relative;
                left:50px;
                top:70px;
                padding:20px;
            }
        </style>
        <div id="divtest">
            <ul>
                <li>Test</li>
                <li>Test</li>
            </ul>
            <div id="test">
            </div>
        </div>
        <script>
    var test = document.getElementById("test");
    test.innerHTML = "<p>Browser:" + navigator.userAgent + "</p>" +
        "<p>offsetParent:" + test.offsetParent.tagName + "</p>" +
        "<p>offsetWidth:" + test.offsetWidth + "</p>" +
        "<p>offsetHeight:"+test.offsetHeight+"</p>"+
        "<p>offsetLeft:"+test.offsetLeft+"</p>"+
        "<p>offsetTop:"+test.offsetTop+"</p>";
        </script>
    </body>
    </html>

      在FireFox中效果为:

    图七

      在其他浏览器中offsetParent也是一致的。

      在这里我们也可以看到,第三点中给出的offsetLeft的计算公式是适用的。

    小结

      以上的总结希望能对大家有所帮助,在看完本文内容后再回过头来看文章开头部分的那张图(只看offset)部分,是不是清楚了很多?

      最后,对于offsetParent为body的情况,现在的主流浏览器IE8/9/10和Chrome及Firefox都跟定义

          offsetLeft=(offsetParent的padding-left)+(中间元素的offsetWidth)+(当前元素的margin-left)。

      offsetTop=(offsetParent的padding-top)+(中间元素的offsetHeight)+(当前元素的margin-top)。

      的不一样,对于这一点我也没有弄明白,如果有朋友知道请不吝赐教。

    本文转自:http://www.cnblogs.com/jscode/archive/2012/09/03/2669299.html 谢谢~

    展开全文
  • offset用法(滑动加载)

    万次阅读 2019-06-17 17:30:54
    第一:select * from table limit 10,5; //含义是跳过10条取出5条数据,limit...第二: select* from table limit 10 offset 5; //含义是从第5条(不包括)数据开始取出10条数据,limit后面跟的是10条数据,offse...

    第一:select * from table limit 10,5;                 

    //含义是跳过10条取出5条数据,limit后面是从第10条开始读,读取5条信息,即读取5条数据

    第二: select * from table limit 10 offset 5;      

    //含义是从第5条(不包括)数据开始取出10条数据,limit后面跟的是10条数据,offset后面是从第5条开始读取,即读取第6--10条

    第一个就不用多说了,今天主说下第二个offset的用法(分页),直接上代码:

     

    从加载中,到暂无数据(滑动加载)

    页面JS

    <script>
        $(function(){
            var itemIndex = 0;
            var tab1LoadEnd = false;
            var page = 1;
            var type = '<?php echo Yii::$app->request->get("type") ? Yii::$app->request->get("type") : 1 ?>';
    
            // tab
            $('.gtable').on('scroll',function(){
                var $this = $(this);
                itemIndex = $this.index();
                // // 如果数据没有加载完
                if(!tab1LoadEnd){
                    // 解锁
                    dropload.unlock();
                    dropload.noData(false);
                }else{
                    // 锁定
                    dropload.lock('down');
                    dropload.noData();
                }
                // 重置
                dropload.resetload();
            });
    
            // dropload
            var dropload = $('#blockBuy').dropload({
                scrollArea : window,
                loadDownFn : function(me){
                    // 加载菜单一的数据
                    page++;
                    var $url = '/trade/showadd.html?pay_type='+ type +'&page='+ page;
                    $.ajax({
                        type: 'GET',
                        url: $url,
                        dataType: 'json',
                        success: function(data){
                            if(data.data != null && data.data.length > 0){
                                var result = '';
                                for(var i = 0; i < data.data.length; i++) {
                                    result += '<li class="reitem"><div class="reile"><img src="/<?php echo $user_info['icon']; ?>" alt="" class="reilimg" /></div><div class="reilr"><p class="reilt"><span class="reilte"><?php echo $user_info['username']; ?></span><span class="reiltr on">' + data.data[i]['amount'] + '</span></p><p class="reilt"><span class="reilte">UID:<?php echo $user_info['userid']; ?></span><span class="reiltr">' + data.data[i]['created_at'] + '</span></p></div></li>';
                                }
                            }else{
                                // 数据加载完
                                tab1LoadEnd = true;
                                // 锁定
                                me.lock();
                                // 无数据
                                me.noData();
                            }
                            // 为了测试,延迟1秒加载
                            setTimeout(function(){
                                $('.lists').eq(itemIndex).append(result);
                                // 每次数据加载完,必须重置
                                me.resetload();
                            },1000);
                        },
                        error: function(err){
                            //alert('Ajax error!');
                            // 即使加载出错,也得重置
                            // me.resetload();
                        }
                    });
                }
            });
        });
    </script>

    控制器

        public function actionShowrecord () {
            $this->layout = false;
            $type = HtmlPurifier::process(Yii::$app->request->get('type'));
            $userid = Yii::$app->user->id;
            $key = $userid."language";
            $lang = Yii::$app->cache->get($key);
            if($type == 1) {
                $event_type = 33;
                $wallet_type = 3;
                $html_type = 'fudou_record';
            } elseif ($type ==2) {
                $event_type = 34;
                $wallet_type = 4;
                $html_type = 'fubi_record';
            } else {
                echo "<script>alert('类型错误')</script>";
                exit;
            }
            $record = WB_UserWalletRecord::getMyRecord($userid,$event_type,$wallet_type);
            if($type == 1){
                $sendType = Yii::t("app","福豆记录");
            }else if($type == 2){
                $sendType = Yii::t("app","福币记录");
            }else{
                echo "<script>alert('类型错误')</script>";
                exit;
            }
            $user_info = WB_UserProfile::find()->where(['userid'=>$userid])->one();
            return $this->render('fudou_record',["record" => $record, 'title' => $sendType,'lang'=>$lang,'user_info'=>$user_info]);
        }
        //  转让福豆记录列表加载
        public function actionShowadd(){
    
            $userid = Yii::$app->user->id;
            $type = HtmlPurifier::process(Yii::$app->request->get('pay_type'));
            if($type == 1) {
                $event_type = 33;
                $wallet_type = 3;
            } elseif ($type ==2) {
                $event_type = 34;
                $wallet_type = 4;
            } else {
                echo "<script>alert('类型错误')</script>";
                exit;
            }
            // 获取订单列表
            $tradeList = WB_UserWalletRecord::getMyRecord($userid,$event_type,$wallet_type);
            return json_encode($tradeList, true);
        }

    model

    public static function getMyRecord($userid,$event_type,$wallet_type) {
            $query = WB_UserWalletRecord::find()->where("userid = :userid",[":userid"=>$userid])->orderBy("created_at desc");
            if ($event_type > 0) {
                $query->andFilterWhere(["=","event_type",$event_type]);
            }
            if ($wallet_type > 0) {
                $query->andFilterWhere(["=","wallet_type",$wallet_type]);
            }
            $countQuery = clone $query;
            $pagesize = 10;
            $pager = new \yii\data\Pagination(['totalCount' => $countQuery->count(), 'defaultPageSize' => $pagesize]);
            $offset = (Yii::$app->request->get("page")-1)*$pagesize;
            $limit = Yii::$app->request->get("limit",$pagesize);
            $res = $query->offset($offset)->limit($limit)->asArray()->all();
            $temp=[];
            foreach($res as $item){
                $temp[]=[
                    "created_at"=>date("Y/m/d",$item['created_at']),
                    "event_type"=> self::$event_type[$item["event_type"]],
                    "amount"=>$item["pay_type"]==1?$item["amount"]:"-".$item["amount"],
                    "wallet_type"=>self::$wallet_type[$item["wallet_type"]],
                ];
            }
            return ["pager" => $pager, "data" => $temp];
        }

    至此就完成了滑动加载效果,每次加载10条(向上滑动一次多加载10条,直到加载出所有)。

    展开全文
  • offset

    2018-12-27 18:59:41
    我是“打死不用IDE,使用IDE也要...一般来说,当编译完成,offset就确定了,但为了跨平台,我们希望,这个偏移值是在编译的时候动态生成的,只要我们在汇编中使用宏就可以了。 第一种方法最简单,那就是手工计算...

    我是“打死不用IDE,使用IDE也要调用我的makefile的maker”。

    在编写汇编代码时候,可能会遇到需要读取C结构体的成员。虽然知道某个结构体变量的地址,但还是得计算成员相对于结构体变量起始地址的偏移(offset)。一般来说,当编译完成,offset就确定了,但为了跨平台,我们希望,这个偏移值是在编译的时候动态生成的,只要我们在汇编中使用宏就可以了。

    第一种方法最简单,那就是手工计算,每次跨平台就自己按照CPU的特性,计算需要使用的成员的偏移。由于汇编是特定平台的,所以这样做哪怕是由32、64位模式下,也是很容易的,但有些麻烦。

    第二种方法很间接,那就是定义一个数组,然后在程序初始化时通过offsetof相似功能的宏填充它,在汇编代码中通过编号间接引用即可。但本来是为了提升速度才使用汇编代码的,为什么要用间接去获取一个根本不会变化的值呢。

    第三种方法很完美,那就是在编译的时候动态生成。这种方式很灵活,但也比较麻烦。一些内核在构建时,由构建系统生成专门的程序处理生成offset头文件(Fiasco与QNX好像是这样的),逻辑很简单,但要求宿主系统编译代码,这有些困难,如果宿主平台也要跨的话。

    Linux采用的是第三种方式,但它并没有使用专门的程序。而是使用内嵌汇编计算offset,然后将c代码编译成汇编代码,通过makefile调用sed程序将它们过滤出来生成offset头文件。

    根据这样的思路,我定义了这样的makefile函数:

    #
    # match >@@@name$offset<
    # $(call EXPORT_DEFINE, config.h)
    #
    define EXPORT_DEFINE
    	$(shell echo '/*' >>$1)
    	$(shell echo ' * This is defines for calculating offset of structure,' >>$1)
    	$(shell echo ' * and output C header file defines.' >>$1)
    	$(shell echo ' */' >>$1)
    	
    	$(shell echo '#define DEFINE(sym, val) \' >>$1)
    	$(shell echo '    __asm__ __volatile__(".ascii \" @@@" #sym "%0 \""::"i"(val))' >>$1)
    	$(shell echo >>$1)                 
    	$(shell echo '#define OFFSET(sym, type, mem) \' >>$1)
    	$(shell echo '    DEFINE(sym, offsetof(struct type, mem))' >>$1)
    endef

    抱歉,CSDN好像没有显示makefile的模板。

    定义的EXPORT_DEFINE函数将生成两个c语言宏,DEFINE与OFFSET,使用它们就可以定义一个offset偏移。这里与Linux定义不一样,相同定义在include/linux/Kbuild.h。

    offsetof用于计算offset值,通过内嵌汇编将值计算出来,定义成汇编中的字符串。这个字符串也是有讲究的,要方便随后将它们过滤出来。

    它们的使用如下:

    offset.c

    struct ty{
        int i;
        char c;
        long l;
        short s;
    };
    
    void foo(void)
    {
        OFFSET(TY_I, ty, i);
        OFFSET(TY_C, ty, c);
        OFFSET(TY_L, ty, l);
        OFFSET(TY_S, ty, s);
        OFFSET(TY_S2, ty, s);
    }

    接下来就是讲这个文件生成对应的.S文件,命令很简单:

    $(CC) $(INCARG) offset.c -S -o offset.S

    我在INCARG参数中添加了EXPORT_DEFINE生成的宏的文件,已经其他头文件,所以这里能编译通过,不用纠结。生成的.S文件很神奇:

    offset.S

    	.file	"offset.c"
    	.text
    	.type	foo, @function
    foo:
    .LFB0:
    	.cfi_startproc
    	pushq	%rbp
    	.cfi_def_cfa_offset 16
    	.cfi_offset 6, -16
    	movq	%rsp, %rbp
    	.cfi_def_cfa_register 6
    /APP
    	.ascii " @@@TY_I$0 "
    	.ascii " @@@TY_C$4 "
    	.ascii " @@@TY_L$8 "
    	.ascii " @@@TY_S$16 "
    	.ascii " @@@TY_S2$16 "
    /NO_APP
    	popq	%rbp
    	.cfi_def_cfa 7, 8
    	ret
    	.cfi_endproc
    .LFE0:
    	.size	foo, .-foo
    	.ident	"GCC: 这里是GCC的自身信息"
    

    好吧,CSDN也没有汇编的模板。分析一下EXPORT_DEFINE生成的OFFSET宏,生成了形如:

    @@@offset名$offset值

    只要将offset名与offset值过滤出来重新定义就可以了。这个模式是在EXPORT_DEFINE定义的,为了给过滤增加特征码,所以添加了3个前导@,过滤的动作就成了,这也是最关键的地方(函数TRANSFORM_OFFSET):

    #
    # make by EXPORT_DEFINE
    # $(call TRANSFORM_OFFSET, offset.h, >cat *.S<)
    #
    define TRANSFORM_OFFSET
    	$(shell echo '#ifndef $(call MAKE_CHEADER_NAME,$(1))' > $1)
    	$(shell echo '#define $(call MAKE_CHEADER_NAME,$(1))' >>$1)
    	
    	$(shell echo >>$1)
    	$(shell echo '/*' >>$1)
    	$(shell echo ' * This is offset defines. Join it' >>$1)
    	$(shell echo ' * TRANSFORM_OFFSET' >>$1)
    	$(shell echo ' */' >>$1)
    	
    	$(shell echo >>$1)
    	$(foreach e, $(patsubst @@@%,%,$(filter @@@%,$2)), \
    		$(shell $(ECHO) '#define $(subst $$, ,$e)' >> $1) \
    	) 
    	
    	$(shell echo >>$1)
    	$(shell echo '#endif' >>$1)
    endef

    函数参数为:第一个参数为输出文件名(存到变量$1中),第二个参数为读出的汇编文件(存到变量$2中)。

    首先通过@@@特征码将它们全部过滤出来,然后通过subst将gas汇编立即数的$替换成空格,然后重定向输出即可。

    过滤的关键是makefile读取这个汇编文件,然后执行相关过滤输出动作。简单的就是Linux这样,使用$(shell sed)直接过滤就好了。但我不是在Linux平台上运行我得构建系统,所以这个行不通,没有sed命令。所以我就想通过makefile自己提供的内置函数进行过滤。但这有一个问题,那就是如何读取汇编文件。

    https://www.gnu.org/software/make/manual/make.html#File-Function

    这个地方讲述的$(file <)根本不行(如果行的话告诉我啊)。然后我就想到执行$(shell cat),但我的IDE只有基本的构建工具,里面恰好没有cat命令。幸运的是,之前学习《Windows系统编程》,跟着作者写了cat.exe文件,噢,恰好用上了。

    所以,目标为:

    $(OFTS_OBJ): $(OFTS_SRC)
    	$(foreach f, $^, \
    		$(shell $(CC) $(INCARG) $f -S -o $(f:.c=.S)) \
    	)
    	$(call TRANSFORM_OFFSET, $@, $(sort $(shell $(CAT) $(^:.c=.S))))
    	$(Q)$(RM) -rf $(^:.c=.S)

    这个地方我的使用情况是多个offset.c文件生成一个asm-offset.h文件。CAT定义为我编译的cat.exe,当构建系统在Linux上运行时,会使用cat命令。在Windows上和Linux上都测试了一下,生成结果还可以:

    #ifndef __ASM_OFFSET_H__
    #define __ASM_OFFSET_H__
    
    /*
     * This is offset defines. Join it
     * TRANSFORM_OFFSET
     */
    
    #define TY_C 4
    #define TY_I 0
    #define TY_L 8
    #define TY_S 16
    #define TY_S2 16
    
    #endif

    然后可以愉快的使用它编写汇编代码了。

    展开全文
  • 文章目录C语言中 offsetof 的使用头文件以及宏原型函数描述示例程序: C语言中 offsetof 的使用 头文件以及宏原型 #include <stddef.h> size_t offsetof(type, member); 函数描述 这个宏会返回一个结构体...
  • offset系列

    2019-09-04 14:56:50
    offset(位移)系列获取元素尺寸(无论样式是设置在属性中还是标签中都可以获取) offsetWidth:获取元素的宽 offsetHeight:获取元素的高 offsetLeft:就是这个元素左边框外,到自己的offsetPar...
  • offset系列浅析

    2017-01-02 20:13:39
    offsetParen offsetWidth offsetLeft :
  • 很多初学者对于JavaScript中的offset、scroll、client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确。 图一  不知道大家看到这张图的第一感觉如何...
  • 关于JS原生的offset的一些简单理解

    千次阅读 2018-06-21 16:21:00
    offset这个属性,可以说是非常有用的,顾名思义,offset翻译过来就是偏移量,从名字就可以看出它的具体意义了。也即是元素相当于父元素的偏移量。offset大致包括offsetTop、offsetLeft、offsetWidth、offsetHeight、...
  • offset、scroll、client三大家族

    千次阅读 多人点赞 2016-09-23 00:26:15
    1、offset 偏移 1、offsetWidth 和 offsetHeight 是用来得到对象的大小,由自身宽高 内边距 边框构成但是不包括 外边距 offsetHeight和style.height的区别 1> style.height只能获取行内样式,offsetHeight...
  • Mysql limit offset用法举例

    万次阅读 多人点赞 2016-11-04 18:03:14
    Mysql limit offset示例 例1,假设数据库表student存在13条数据。   代码示例: 语句1:select * from student limit 9,4 语句2:slect * from student limit 4 offset 9 // 语句1和2均返回表student的第10...
  • Mysql limit offset 用法示例

    万次阅读 2018-05-31 10:28:42
    Mysql limit offset示例例1,假设数据库表student存在13条数据。 代码示例:语句1:select * from student limit 9,4语句2:slect * from student limit 4 offset 9// 语句1和2均返回表student的第10、11、12、13行...
  • Kafka auto.offset.reset值详解

    万次阅读 多人点赞 2017-07-06 11:31:15
    昨天在写一个java消费kafka数据的实例,明明设置auto.offset.reset为earliest,但还是不从头开始消费,官网给出的含义太抽象了。 earliest: automatically reset the offset to the earliest offset,自动将偏移量...
  • SQL查询语句中的 limit 与 offset 的区别

    万次阅读 多人点赞 2019-09-25 11:51:26
    SQL查询语句中的 limit 与 offset 的区别: limit y 分句表示: 读取 y 条数据 limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据 limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据 比如分页获取...
  • Illegal string offset ' ' 解决方法

    万次阅读 2018-12-17 11:40:18
    Illegal string offset ' ' 解决方法 今天在thinkphp5的框架里遇到了这个错误,具体的报错如下图 翻译后是“非法字符串偏移 ‘pay_price’”,意思是$v数组里面有空数组,空数组里没有pay_price这个字段。所以...
  • sql 中 limit 与 limit,offset连用的区别

    万次阅读 2020-02-13 08:45:34
    ① select * from table limit 2,1; //含义是跳过2条取出1条数据,limit后面是从第2条开始...//含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条...
  • TypeError: can't compare offset-naive and offset-aware datetimes 这是因为两个时间不属于同一类型,offset-naive是不含时区的类型,而offset-aware是有时区类型,两者自然不能比较。 我们可以通过判断...
  • 修改kafka topic的offset几种方法

    万次阅读 2016-12-15 10:44:11
    查询topic的offset的范围 用下面命令可以查询到topic:test broker:suna:9092的offset的最小值: bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list suna:9092 -topic test --time -2 输出 ...
  • Notice: Undefined offset 的解决方法

    万次阅读 2012-07-19 17:16:30
    今天在调试程序的时候总是出现错误提示: Notice: Undefined offset: 23 in xxx.php on ...这问题很常出现在数组中的,程序是能正确地运行下去,但是在屏幕上总会出现这样的提示:Notice: Undefined offset: ….
  • 今天在使用array_count_values($a) 时,该函数返回的是一个数组。...然后在运行的报错: Notice: Undefined offset: 0 后来才发现了问题。该报错的原因是数组的下标没有定义或者不存在。仔细检查。
1 2 3 4 5 ... 20
收藏数 527,568
精华内容 211,027
关键字:

offset