一些编程基础的注意(持续更新)

形参如果是字符或整型数组的数组名,用for循环赋值或strcpy赋值函数结束后可以保留这些值,而形参如果是指针的话,不能用strcpy赋值,而是直接等于,函数结束后不可以保留赋的值。

 

>>的时候如果超过最低位了,则超过的部分自动消失,无需先&再>>。

如11110101,如果需要取高四位放在低四位上,不需要(11110101 & 11110000)>>4,直接11110101>>4即可,如果11110101前面的位有值则不能这样,如110011110101,不能去掉&11110000。

 

如果一个变量abc不同位的值分布在不同的变量def中,可以不用从abc赋值,而是先解析d,再解析e和f,用a|=来给a赋值。

如果编译器没有设置__My_Debug__,则以下代码段的Test()函数不运行,以此来区分测试和主代码,测试代码和主代码不要写在一个类中。

#if __My_Debug__

Test();

#endif

__My_Debug__在property(Art + F7)中的C/C++的preprocessordefinitions中放入。

 

乘法(乘以2的倍数)可以用<<代替,除法(除以2的倍数)可以用>>代替,比如:

1*8 等价于 1<<3

6/8等价于 6>>3

fWidth %8等价于fWidth &0x07

 

按8的长度来算,如果最后有剩余,加一。

if(fWidth & 0x07){

     fBytesPerRow += 1;

}

 

按8来分段,求最后不够8长度的剩余的点数。

unsigned short blockoffset = x&0x07;

 

在类中初始化赋值或在函数中赋值的不变的成员变量,获取的时候在函数最后加const,防止变量被随意改动。

 

unsigned short fW;

unsigned short fV;

unsigned short fY;

 

unsigned short W() const {return fW;};

unsigned short V() const {return fV;};

unsigned short Y() const {return fY;};

unsigned short X() const {return W();};

 

unsigned short width() const {return fW;}

unsigned short height() const {return fV;}

unsigned short finderSize() const { returnfFinderSize;};

 

UINT GetSelectedCount( ) const;

该函数返回列表视图控件中被选择列表项的数量。

 

voidComl_BarGen_MaxiCode_Module::fillBlock(unsignedchar*block,unsignedintstride,unsignedshortoffset)

{

       unsignedchar* prow = (unsignedchar*)0;

       unsignedint rowid = 0;

 

       for(rowid=0; rowid <height(); ++rowid) {

              prow= block + rowid * stride;

              EdgeList* rowtempl =getRowTemplate(rowid);

              fillRow(prow,offset, rowtempl);

       }

}

在一个函数中要保证某个参数或功能满足一定条件,可以用assert函数,assert(false)为报错,assert(true)为正确。

Ex.

assertx<1)为x应小于1,不然即报错。

 

voidComl_BarGen_2DRenderMaxicode::drawCellAt(unsignedintx,unsignedinty)

{

       assert(x<fWidth && y<fHeight);

       assert(x+fModule->width() <fWidth && y+fModule->height() <fHeight);

 

       unsignedchar* pblock = fImgbuff+ (y*fBytesPerRow+(x >> 3 ));

       unsignedshort blockoffset =x&0x07;

 

       fModule->fillBlock(pblock,fBytesPerRow, blockoffset);

}

 

MFC中获取窗口句柄及相关函数 

首先,窗口句柄,在窗口类中直接使用成员变量m_hWnd,在窗口外最常见是用AfxGetMainWnd (获取主窗口指针,其成员变量m_hWnd为主窗口句柄):

HWND hWnd = AfxGetMainWnd()->m_hWnd;

 

HWND是Windows系统中对所有窗口的一种标识,即窗口句柄。这是一个SDK概念。   
CWnd是MFC类库中所有窗口类的基类。微软在MFC中将所有窗口的通用操作都封装到了这个类中,如:ShowWindow等等,同时它也封装了窗口句柄即m_hWnd成员。

 

char postalCode[12];

memset(postalCode, 'c', 12*sizeof(char));

result:

cccccccccccc

 

char* str ="B105";

strcpy_s(postalCode, 5, str);\\只更新了前5个地址的内容,后面没变。

result:

B105\0ccccccc

strcpy_s(postalCode, 12, str);\\更新了前5个地址内容后,虽然没有指定值,但也更新为其他内容。

result:

B105\0-2-2-2-2-2-2-2

strcpy_s(postalCode, str);\\同上

result:

B105\0-2-2-2-2-2-2-2

 

1. 理解解析器传给中间模块的数据结构。(数据结构文件:dgbtool.sdcc.h)

2. 写出以下命令对应的数据结构的值:(PLW语言规范:plw.xps)

     -  AA(整数型): 3-1)3-2-6-(1)円弧パスの追加(半径指定)      Page106

     - SA(整数型):3-1-1-(1)座标系の指定(整数型)           Page37

     - DM(整数型):3-3-12-(1)イメージマスクの描画(整数型)   Page157

 

近日,小弟在研究UCOSVC++版的时候,发现它的头文件并没有在当前目录下,却可以精确的找到。我估计一定是:VC++编辑器早设置好了,早已经告诉编译器位置了。再谷歌,百度一下的解。

第一种方法:工程(Project)-->设置(Setting)-->C/C++选项卡 -->分类   选择“预处理器(Preprocessor)”,在下面有一项“附加包含路径(AdditionalInclude Files)”,里面写上头文件所在的目录即可。

 

第二种方法:Tools->options->Directories,选择Include Files,在下面添加目录

安装gitg:

sudoapt-get install gitg

 

 

 

 

 

包含头文件用相对目录,因为绝对目录在别人的环境下可能找不到,相对目录在当前目录前一层用..\.

 

指针参数只能改变其值,无法改变指针的值,用双重指针可以。

把一个指针赋给另一个指针,然后对另一个指针进行free以及置空,原始指针内容清楚,但指针地址不变,无法置空。


把double型数据转换成int型数据的简单方法:

void main( void )
{
    double d=5.6;
    int i = (int)(d+0.5);
    printf("%d",i);
}
一个数的n次方:
程序要引用math.h文件,使用时
pow(x,y)表示x的y次方。

给一个数开平方:

int m,n;
  m=sqrt(n);   //此语句就是给整数n开平方根了。
 printf("%d";m);
给一个数x开n次方:

pow(x,1/n)

整数和字符串互相转换:

atoi、itoa



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章