标题:vc 可以在数组定义里面使用宏么
只看楼主
Vincent800
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2015-5-17
结帖率:100%
已结贴  问题点数:20 回复次数:6 
vc 可以在数组定义里面使用宏么
#define SETBYTE ???

UCHAR data[10] = {SETBYTE(2,5), SETBYTE(3,0), SETBYTE(3,0xa), SETBYTE(2,4)};


就是定义数组为{5,5,0,0,0,0xa,0xa,0xa,4,4};
想搞个通用的宏,数组比较大时就很方便了
搜索更多相关主题的帖子: vc 数组 定义  比较 
2018-02-02 17:56
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:20 
你还不如写个 vector, 然后用一个类或者函数来实现.
数组的话,除非你确定你只初始化一次, 不然你写的类或者函数 要重定义数组大小来适应新加入的元素数量



hl928452957@gmail点com

2018-02-03 08:49
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:0 
程序代码:
    xx(vector<int>& vec,int i1,int i2){
        for(int i=0;i<i1;++i)
            vec.push_back(i2);
    }



程序代码:
int main() {
vector<int> vec;
xx (vec,2,5),xx (vec,3,0),xx (vec,3,0xa);  //十六进制 输出的话是十进制显示,   如果你想显示成 0xXXX 你就得换成 Vector<string>
    return 0;
}

hl928452957@gmail点com

2018-02-03 08:58
Vincent800
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2015-5-17
得分:0 
谢谢,只能用函数来解决了

#define SETBYTE(n,d) n,(UCHAR)d

    //////////////////////////////////////////////////////////////////////////
    // 初始化数组,不作越界检测
    VOID InitData(UCHAR* data, ...)
    {
        STRUCT(_setbyte)
        {
            INT n;
            INT d;
        };
        vector<_setbyte> vec_sb;
        vec_sb.clear();
        _setbyte sb;

        va_list marker;

        va_start( marker, data );     /* Initialize variable arguments. */
        do
        {
            sb.n = va_arg(marker, INT);
            sb.d = va_arg(marker, INT);
            //Output::DbgStr(TEXT("%p,%p"), sb.n, sb.d);

            if (sb.n>0 && sb.n<100000 && sb.d<256)
                vec_sb.push_back(sb);
            else
                break;
        } while (TRUE);
        va_end( marker );              /* Reset variable arguments.      */

        UINT nPos = 0;
        vector<_setbyte>::iterator psb = vec_sb.begin();
        while (psb != vec_sb.end())
        {
            //Output::DbgStr(TEXT("%p,%02x"), psb->n, psb->d);
            FillMemory(data+nPos, psb->n, psb->d);
            nPos += psb->n;
            //
            psb++;
        }
    }


    //////////////////////////////////////////////////////////////////////////
    UCHAR data[16];
    Common::InitData(data, SETBYTE(2,6), SETBYTE(3,4), SETBYTE(4,8), SETBYTE(1,9), SETBYTE(sizeof(data)-10,0xb));
    TCHAR buffer[100];
    for (int i=0; i<16; i++)
    {
        StringCchPrintf(buffer+i*3, 4, TEXT("%02x "), data[i]);
    }
    Output::DbgStr(buffer);


2018-02-03 12:39
Vincent800
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2015-5-17
得分:0 
可变参数的函数,不知怎么获取参数个数,我只好这样来判断了

            if (sb.n>0 && sb.n<100000 && sb.d<256)
                vec_sb.push_back(sb);
            else
                break;

可算个bug了
2018-02-03 13:01
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:0 
回复 5楼 Vincent800
我记得  ... 就是可变参数


参考http://blog.

[此贴子已经被作者于2018-2-6 07:42编辑过]


hl928452957@gmail点com

2018-02-06 07:40
Vincent800
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2015-5-17
得分:0 
回复 6楼 stop1204
好的
我看了,我就是弄不懂第4点中,循环退出的条件
2018-02-07 00:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484600-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.162518 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved