一些編程基礎的注意(持續更新)

形參如果是字符或整型數組的數組名,用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



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