Time of Update: 2018-12-04
__declspec(dllexport)與.def檔案在VC++中,如果產生DLL可以不使用.def檔案。只需要在VC++的函數定義前要加__declspec(dllexport)修飾就可以了。但是使用__declspec(dllexport)和使用.def檔案是有區別的。如果DLL是提供給VC++使用者使用的,只需要把編譯DLL時產生的.lib提供給使用者,它可以很輕鬆地調用你的DLL。但是如果DLL是供VB、PB、Delphi使用者使用的,那麼會產生一個小麻煩。因為VC++對於__dec
Time of Update: 2018-12-04
1.行寬原則上不超過80列,把22寸的顯示屏都占完,怎麼也說不過去;2.盡量不使用非ASCII字元;3.UNIX/Linux下無條件使用空格,MSVC的話使用Tab也無可厚非;4.函數參數、邏輯條件、初始化列表:要麼所有參數和函數名放在同一行,要麼所有參數並排分行…… 格式代碼風格和格式確實比較隨意,但一個項目中所有人遵循同一風格是非常容易的,作為個人未必同意下述格式規則的每一處,但整個項目服從統一的編程風格是很重要的,這樣做才能讓所有人在閱讀和理解代碼時更加容易。 1.行長度(Line
Time of Update: 2018-12-04
編程風格指南的使用要點在於提供一個公用的編碼規範,所有人可以把精力集中在實現內容而不是表現形式上。我們給出了全域的風格規範,但局部的風格也很重要,如果你在一個檔案中新加的代碼和原有代碼風格相去甚遠的話,這就破壞了檔案本身的整體美觀也影響閱讀規則之例外前面說明的編碼習慣基本是強制性的,但所有優秀的規則都允許例外。 1. 現有不統一代碼(Existing Non-conformant
Time of Update: 2018-12-04
一般來說,將二維數組傳給函數時,不能省略第二維的長度,也就是說,必須像這樣void fun(int arr[][6], int n)這樣的話第二維就被固定死的。但有時,我們確實需要處理不同的二維數組,這裡有一個巧妙的方法:考慮到二維數組實際上是連續儲存的,比方有數組a[3][4],那麼a[0][3]後面緊跟著的元素是a[1][0],基於這一點,就可以通過“手工”定址,達到向函數傳遞不定長二維數組的目的。#include <stdio.h>void fun(int *arr, int
Time of Update: 2018-12-04
/*竊以為好的程式能在各種編譯器中運行,故代碼編寫者需謹慎,並瞭解某些真相!*/int main(){int a=42;printf("%d\n",a);}上面的小程式有什麼問題呢?你能想起幾條來呢?加上以下幾點才是接近“正確的”的C程式。1.#include<stdio.h>2.return 0;程式啟動並執行結果是:在螢幕上列印42,並換行。其實,上述兩條修改之外,還可以有所改進的-----3. int main(void)再看下面的小程式:#include<stdio.
Time of Update: 2018-12-04
今天知道了<new>這個標頭檔,而且new還可以這樣:使用new不分配記憶體空間,只調用建構函式,如下代碼#include <iostream>#include <new>class CMyClass{public:CMyClass(){ std::cout << "here i am " << std::endl; }};int main(int, char**){CMyClass *c = new((void*)100)
Time of Update: 2018-12-04
C++批判的批判 1,typedef不必要?a,typedef提供了一層間接,物件導向語言中,介面掩蓋了運行時不同具體類型間的差別,而typedef掩蓋了編譯時間不同類型間的差別,卻又不喪失型別安全b,一般語言只能返回“值”,而typedef提供了返回“類型”的能力,這是模板元編程不可或缺的機制,除非模板元編程眼下也是不必要的2,匯入在不同地點分別對#include,private成員放在標頭檔中,inline函數也放在標頭檔中進行了批判,實際上原因只有一個:C++不是平台,它沒有二進位標準,
Time of Update: 2018-12-04
指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。 要搞清一個指標需要搞清指標的四方面的內容:指標的類型,指標所指向的 類型,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。 先聲明幾個指標放著做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3]; (5)int*(*ptr)[4];
Time of Update: 2018-12-04
Linux下C開發編輯器:VI編譯器:選擇GNU C/C++編譯器gcc調試器:應用廣泛的gdb函數庫:glibc系統標頭檔:glibc_header若想開發圖形介面,還需選上GNOME(c)/KDE(c++)軟體開發IDE:(大多數人還是直接使用gcc)Kylix:號稱Linux下的DephiKdevelopRHIDE:類似Turbo C++
Time of Update: 2018-12-04
shell指令碼(.sh):類似windows下的批處理bat.檔案比批處理強大,已經是一強大的程式設計語言了。echo "please enter your name:";read fname;echo ${fname} //{}可以省略預設資料類型為 字元類型env 查看環境變數echo $HOME 查看目前使用者目錄echo $PATH./執行;也可以修改vi /etc/profile增加 PATH=$PATH:.export PATH
Time of Update: 2018-12-04
shell的輸入與輸出主要包括:echo命令read命令cat命令管道tee命令標準輸入、輸出和標準錯誤重新導向echo [-e] [-n] stringstring : 字串,可以含 shell 變數、轉義符等, 一般用雙引號括起來-e : 讓 echo 解釋 string 中的轉義符-n : 禁止 echo 輸出後輸出 NEWLINE(換行)cat [-n][-b][-t][-e] file1 file2 ...cat
Time of Update: 2018-12-04
c檔案操作函數 clearerr(清除檔案流的錯誤旗標) 相關函數 feof表標頭檔 #include<stdio.h> 定義函數 void clearerr(FILE * stream); 函數說明 clearerr()清除參數stream指定的檔案流所使用的錯誤旗標。 傳回值 fclose(關閉檔案) 相關函數 close,fflush,fopen,setbuf 表標頭檔 #include<stdio.h> 定義函數 int
Time of Update: 2018-12-04
編譯預先處理三種預先處理命令1.宏定義2.包含檔案 #include3.條件編譯定義 #define S(a,b) a*b引用 S(a+c,b+c)展開 a+c*b+c條件編譯#define DEBUG //調試版本,在發布版本中把這句刪除,那麼程式中調試部分不會起作用情況一:#if常量運算式 程式段1#else 程式段2#endif情況二:#ifef 標識符 //是否已經定義 程式段1#else 程式段2#endif常見:#ifdef
Time of Update: 2018-12-04
話說總結下C檔案編譯過程.首先假設有這麼一段經典C程式:#include <stdio.h>int main(){printf("hello\n");return 0;}首先將上述程式儲存為標準的ASCII文字檔hello.c.於是乎編譯之,系統開始這麼處理:前置處理器開始介入,對該檔案進行預先處理,也即文本替換,把#後面的一大堆替換掉,比如上面那程式中第一行的#include
Time of Update: 2018-12-04
1.C++的虛函數是怎樣實現的?
Time of Update: 2018-12-04
C++標準庫的所有標頭檔都沒有副檔名。C++標準庫的內容總共在50個標準標頭檔中定義,其中18個提供了C庫的功能。 <cname>形式的標準標頭檔【 <complex>例外】其內容與ISO標準C包含的name.h標頭檔相同,但容納了C++擴充的功能。在 <cname>形式標準的標頭檔中,與宏相關的名稱在全域範圍中定義,其他名稱在std命名空間中聲明。在C++中還可以使用name.h形式的標準C庫標頭檔名。C++標準庫的內容分為10類:C1.語言支援
Time of Update: 2018-12-04
//Log.h#ifndef _LOG_H#define _LOG_H#include <string>#include <time.h>#include <sys/types.h>#include <unistd.h>#include <stdarg.h>#include <sys/stat.h>#include <pthread.h>class CAutoLock{ private:
Time of Update: 2018-12-04
大致說uinx鎖一般可以分為3種[可能有更多。偶不知道]。線程鎖,訊號量,和記錄鎖。線程鎖對線程有效,訊號量和記錄鎖對進程有效。訊號量:OS課堂上進程式控制制這一章最牛X的概念。優點:效率高。缺點:容易死結。缺點太明顯。沒怎麼用。以後慢慢考慮。線程鎖:多線程的基礎。。優缺點和訊號量差不多。有這樣一個AutoLock,好處就是 在一個鎖變數的生命週期內有效。在函數直接放一個CAutoLock 。就都搞定了。。class CAutoLock{private: pthread_mutex_t*
Time of Update: 2018-12-04
class COcciConn{public: COcciConn() { m_status = false ; env = NULL ; conn = NULL ; stmt = NULL ; } ~COcciConn() { if ( conn && stmt ) conn->terminateStatement (stmt); if(
Time of Update: 2018-12-04
在電腦領域,堆棧是一個不容忽視的概念,我們編寫的C語言程式基本上都要用到。但對於很多的初學著來說,堆棧是一個很模糊的概念。堆棧:一種資料結構、一個在程式運行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆棧一詞混為一談。我身邊的一些編程的朋友以及在網上看帖遇到的朋友中有好多也說不清堆棧,所以我想有必要給大家分享一下我對堆棧的看法,有說的不對的地方請朋友們不吝賜教,這對於大家學習會有很大協助。