Time of Update: 2018-12-06
define是C語言中的預先處理命令,它用於宏定義,可以提高原始碼的可讀性,為編程提供方便。預先處理命令以“#”號開頭,如包含命令#include,宏定義命令#define等。一般都放在源檔案的前面,它們稱為預先處理部分。所謂預先處理是指在進行編譯之前所作的工作。預先處理是C語言的一個重要功能,它由預先處理程式負責完成。當對一個源檔案進行編譯時間,系統將自動引用預先處理程式對來源程式中的預先處理部分作處理,處理完畢自動進入對來源程式的編譯。宏的定義在C或C++語言來源程式中允許用一個標識符來表示
Time of Update: 2018-12-06
(一)寫一個簡單的可變參數的C函數下面我們來探討如何寫一個簡單的可變參數的C函數.寫可變參數的C函數要在程式中用到以下這些宏:void va_start( va_list arg_ptr, prev_param );type va_arg( va_list arg_ptr, type );void va_end( va_list arg_ptr
Time of Update: 2018-12-06
語言位元運算符:與、或、異或、取反、左移和右移位元運算是指按二進位進行的運算。在系統軟體中,常常需要處理二進位位的問題。C語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long類型。C語言提供的位元運算符列表:運算子 含義 描述& 按位與 如果兩個相應的二進位位都為1,則該位的結果值為1,否則為0| 按位或 兩個相應的二進位位中只要有一個為1,該位的結果值為1^ 按位異或 若參加運算的兩個二進位位值相同則為0,否則為1~
Time of Update: 2018-12-06
使用printf列印時發現,如果資料類型和列印使用的類型不一致,結果就是混亂的。這是因為printf本身並不進行資料的類型轉換,他只是把輸入按照給定的資料格式輸出,如果二者不匹配,那麼由於不同資料類型的二進位儲存方式不一樣,讀出的資料就是錯誤的。所以,為求穩妥,在使用printf,fprintf,scanf,fscanf在類型不一致時還是手動轉化吧! printf("%f\n",1.3); printf("%d %f\n",1.3,1.3);列印結果: 1.300000-85899
Time of Update: 2018-12-06
指向字串常量的指標和字串數組在使用時是有區別的。看下面兩個函數//執行通過,返回“hello world”char *PtrChar(){ char *pc = "hello world"; return *r;}//執行錯誤,不能返回局部變數char *ArrChar(){ char ac[] = "hello world"; return ac;}出現上面的原因在於指標pc指向的字串“hello
Time of Update: 2018-12-06
在開始寫中斷函數之前,我們來一起回顧一下,單片機的中斷系統。 中斷的意思(學習過微機原理與介面技術的同學,沒學過單片機,也應該知道),我們在這裡就不講了,首先來回憶下中斷系統涉及到哪些問題。 (1)中斷源:插斷要求訊號的來源。(8051有3個內部中斷源T0,T1,串列口,2個外部中斷源INT0,INT1(這兩個低電平有效,上面的那個橫杠不知道怎麼加上去))
Time of Update: 2018-12-06
1.bit和sbit都是C51擴充的變數類型。 bit和int char之類的差不多,只不過char=8位, bit=1位而已。都是變數,編譯器在編譯過程中分配地址。除非你指定,否則這個地址是隨機的。這個地址是整個可定址空間,RAM+FLASH+擴充空間。bit只有0和1兩種值,意義有點像Windows下VC中的BOOL。 sbit是對應可位定址空間的一個位,可位定址區:20H~2FH。一旦用了sbi xxx =
Time of Update: 2018-12-06
C++ 的常用庫http://www.cplusplus.com/reference/map Libraryhttp://www.cplusplus.com/reference/stl/map/ 簡單用法如下: typedef pair<const Key, T> value_type;Iterators of a map container point to elements of this value_type. Thus, for an iterator called it
Time of Update: 2018-12-06
這是一個很有意思的問題,也是在面試中最容易被問到的問題之一。這個問題有個正式的名字叫Hamming_weight,而且wikipedia上也提供了很好的位元運算解決的方法,這個下面也會提到。解決這個問題的第一想法是一位一位的觀察,判斷是否為1,是則計數器加一,否則跳到下一位,於是很容易有這樣的程式。?12345678910int test(int n) { int count=0; while(n != 0){ if(n%2 ==1)
Time of Update: 2018-12-06
在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當電腦正常開機後,這個種子的值是定了的,除非你破壞了系統,為了改變這個種子的值,C提供了srand()函數,它的原形是void srand( int a)。可能大家都知道C語言中的隨機函數random,可是random函數並不是ANSI
Time of Update: 2018-12-06
++i 與 i++ 的區別1、++i 的用法(以 a=++i ,i=2 為例) 先將 i 值加 1 (也就是 i=i+1 ),然後賦給變數 a (也就是 a=i ), 則最終 a 值等於 3 , i 值等於 3 。 所以 a=++i 相當於 i=i+1 ,a=i2、i++ 的用法(以 a=i++ ,i=2 為例) 先將 i 值賦給變數 a (也就是 a=i ),然後 i 值加 1 (也就是 i=i+1 ), 則最終 a 值等於 2 ,i 值等於 3 。 所以 a=i+
Time of Update: 2018-12-06
求400的階乘C/C++ code#define N 400long a[8916]={1,0},n,i,c,len; int main(void) { n=N; for ( len=1;n>1; n--) { for (c=0,i=0; i<len;i++ ) { a[i]= ( c+= a[i]*n ) % 10000; c/=10000; } ((
Time of Update: 2018-12-06
#include <unistd.h>符號常量是POSIX標準定義的unix類系統定義符號常量的標頭檔,包含了許多UNIX系統服務的函數原型,例如read函數、write函數和getpid函數unistd.h在unix中類似於window中的windows.h!#ifdef WIN32#include <windows.h>#else#include <unistd.h>#endifunistd.h含有的常量與函數:ssize_t
Time of Update: 2018-12-06
STM32——C語言資料類型在編程過程中,不同的CPU,其資料類型的意義各不相同,所以一定要注意相應VARIANT 資料型別的定義和轉換,否則在計算中可能會出現不確定的錯誤。(一)C語言中的種類資料整型:int short long實型:float doubleSTM32中的資料類型非常的多,常用的變數,檔案中的定義如下: /* exact-width signed integer types */typedef signed char int8_t;typedef
Time of Update: 2018-12-06
簡介: 函數名: sleep 功 能: 執行掛起一段時間 用 法: unsigned sleep(unsigned seconds); 在VC中使用帶上標頭檔 #include <windows.h> 在gcc編譯器中,使用的標頭檔因gcc版本的不同而不同 linux系統需要添加的標頭檔 #include <unistd.h> 注意 : 在VC中Sleep中的第一個英文字元為大寫的"S" 在標準C中是sleep, 不要大寫..
Time of Update: 2018-12-06
# mkfifo myfifo# pingedu.cn >> myfifo 另開一個終端:# cat myfifo看到效果了吧mkfifo 命令用途製作先進先出(FIFO)特別檔案。文法mkfifo [ -m Mode ] File …描述根據指定的順序,mkfifo 命令建立由 File 參數指定的 FIFO 特別檔案。如果沒有指定 -m Mode 標誌,則 FIFO 檔案的檔案方式是通過檔案方式建立所修改的包含 OR 的
Time of Update: 2018-12-06
·線程建立 函數原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg); 傳回值:若是成功建立線程返回0,否則返回錯誤的編號。 形式參數:pthread_t *restrict tidp要建立的線程的線程id指標;const pthread_attr_t *restrict
Time of Update: 2018-12-06
linux下通過C執行命令的時候一半都是使用system()方法,但是該方法執行命令返回的值是-1或0,而有時候我們需要得到執行命令後的結果。可以使用管道實現輸出到檔案流的函數是popen(),例如FILE *isr;isr = popen("ls -l","r"); ls -l命令的輸出通過管道讀取("r"參數)到isr下面是示範例子,列出當前可用的loop裝置,(必須是root許可權才可以執行losetup -f)#include <stdio.h>#include
Time of Update: 2018-12-06
Include的header檔案,連結資料庫,系統定義,總共有下列來源指定gcc去那找。當初在編譯時間指定的(在~gcc/gcc/collect2.c:locatelib()寫在specs內的後來用-D -I -L指定的gcc環境變數設定(編譯的時候)ld.so的環境變數(這是run time的時候) 一、標頭檔 gcc 在編譯時間如何去尋找所需要的標頭檔 :所以header
Time of Update: 2018-12-06
一、預備知識—程式的記憶體配置 一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分:棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鏈表。全域區(靜態區)(static)—,全域變數和靜態變數的儲存是放在一塊的,初始化的全域變數和靜態變數在一塊地區,