Time of Update: 2018-12-04
http://blog.csdn.net/zhanglianpin 我們知道C語言是一種進階語言,所謂進階語言就是要經過翻譯才能在具體平台上啟動並執行程式。而編譯器是一種比較繁瑣的程式,它要把進階語言編譯和連結後,成為能夠在具體平台啟動並執行程式。這其中有很多知識是和作業系統和具體硬體平台相關的,如果你想弄清楚編譯器請學習編譯原理,有一本書可以參考《linkers_and_loaders》。 我們這裡只是說明一下C語言啟動並執行環境以及和棧的關係。讓我們從組合語言和底層硬體來瞭解C語言的一些概念
Time of Update: 2018-12-04
手邊常備一本《C語言參考手冊》是十分必要的Kernighan和Ritchie的《The C Programming Language》(中譯名《C程式設計語言》)堪稱經典中的經典,不過舊版的很多內容都已淘汰,和現在的標準C語言相去甚遠,大家一定要看最新的版本,否則不如不看。還有一本《C和指標》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指標的重要性,算是本書的一個特點吧如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps
Time of Update: 2018-12-04
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 編寫程式不容易,編寫多線程的程式更不容易。相信編寫過多線程的程式都應該有這樣的一個痛苦過程,什麼樣的情況呢?朋友們應該看一下代碼就明白了,void data_process(){ EnterCriticalSection(); if(/* error happens */) { LeaveCriticalSection();
Time of Update: 2018-12-04
在GNOME案頭運行終端,直接 su 切換到 root 後,在終端用命令運行有些圖形介面的程式,有些能運行但報錯,或者根本運行不起來。可能是因為直接用 su 切換到 root 後,root 使用的環境變數是使用 su 命令普通使用者的環境變數。[root@localhost bin]# ./qtcreator**GLib-GIO:ERROR:gdbusconnection.c:2270:initable_init: assertion failed:
Time of Update: 2018-12-04
//////////////////////////////////////////////////////////////////////////////////更多原創“uC/OS-II學習筆記之:系列”基礎及嵌入式相關知識詳解,請訪問可樂虎部落格:http://blog.csdn.net/dcx1205相信不會讓您失望!!////////////////////////////////////////////////////////////////////////////////////寫
Time of Update: 2018-12-04
執行和終止一個可執行程式可用execvp():執行:char *arg[]= {"snmpd", "-c snmpd.conf"};execvp(arg[0], arg[]);終止killall:if (find_pid_by_name("dnsmasq") < 0) return ret;char *arg[]= {"killall", "-9", "snmpd"}; execvp(arg[0], arg[]);find_pid_by_name()實現如下:/* from
Time of Update: 2018-12-04
經典設計模式小結其實設計模式真的很好理解,如下理解了,很具有實用性的。1、FACTORY?追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory 原廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何建立及如何向用戶端提供。 2、BUILDER?
Time of Update: 2018-12-04
#include<iostream>using namespace std;struct A{int a;int b;char c;};void f(struct A *&p, int a, int b, char c){p = new struct A;if (!p){return;}else{p->a = a;p->b = b;p->c = c;}}int main(){struct A *p = NULL;f(p, 1, 2,
Time of Update: 2018-12-04
/********************************************************************** 測試多次free的後果***********************************************************************/#include<iostream>#include<cstdio>using namespace std;int
Time of Update: 2018-12-04
引言 隨著對高處理能力、即時多任務、超低功耗等方面需求的增長,高端嵌入式處理器已經進入了國內開發人員的視野,並在國內得到了普遍的重視和應用。 ARM是目前嵌入式領域應用最廣泛的RISC微處理器結構,憑藉低成本、低功耗、高效能等優點佔據了嵌入式系統應用領域的領先地位。ADS是ARM公司推出的ARM整合式開發環境,提供了對C和C++的支援,是目前開發ARM的主要工具。本文針對日益縮短的嵌入式開發週期,結合ARM系統開發調試經驗,對使用ARM標準庫進行應用程式開發作了比較系統的分析。1
Time of Update: 2018-12-04
資料成員可以分靜態變數、非靜態變數兩種.
Time of Update: 2018-12-04
我們知道C語言是一種進階語言,所謂進階語言就是要經過翻譯才能在具體平台上啟動並執行程式。而編譯器是一種比較繁瑣的程式,它要把進階語言編譯和連結後,成為能夠在具體平台啟動並執行程式。這其中有很多知識是和作業系統和具體硬體平台相關的,如果你想弄清楚編譯器請學習編譯原理,有一本書可以參考《linkers_and_loaders》。 我們這裡只是說明一下C語言啟動並執行環境以及和棧的關係。讓我們從組合語言和底層硬體來瞭解C語言的一些概念和C語言是如何利用棧來進控制程序呼叫的。先講一下棧:棧是這樣一種結
Time of Update: 2018-12-04
《C語言介面與實現》作為介面庫,源檔案中大量使用了可變參數表,這些到底是怎麼使用的?先來看這幾個例子,基本明白了可變參數表使用。後面部分從網上整理了原理:來源程式:#include <stdio.h>#include <stdarg.h>#include <string.h>//// 使用樣本1:追加串// void Va_Fn1(char *dest, char *data, ...){va_list ap;char *p =
Time of Update: 2018-12-04
c語言中的複雜原型聲明是很多人都頭痛的事,下面我說一下自己的理解。主要是從理解的角度說明聲明的內容。 1.首先是從左往右找到未聲明的標識符,2.再找將未宣告身份識別符括起來的最裡層的小括弧的一大塊,再根據運算子的等級(提醒越是裡面的小括弧優先順序比外面的小括弧就有優先,如(*(*func)(int *))將*func括起來的比將*(*func)(int *)括起來的優先)和結合性來分析,當分析時遇到指標時的下一步就應該確定指標指向什麼類型
Time of Update: 2018-12-04
我們知道C語言是一種進階語言,所謂進階語言就是要經過翻譯才能在具體平台上啟動並執行程式。而編譯器是一種比較繁瑣的程式,它要把進階語言編譯和連結後,成為能夠在具體平台啟動並執行程式。這其中有很多知識是和作業系統和具體硬體平台相關的,如果你想弄清楚編譯器請學習編譯原理,有一本書可以參考《linkers_and_loaders》。 我們這裡只是說明一下C語言啟動並執行環境以及和棧的關係。讓我們從組合語言和底層硬體來瞭解C語言的一些概念和C語言是如何利用棧來進控制程序呼叫的。先講一下棧:棧是這樣一種結
Time of Update: 2018-12-04
1.功能:建立(build objects)對象,將一連串的隨意的記憶體位變對象,也分配資源(memory, files, semaphores, sockets等),"ctor" 是建構函式(constructor)典型的縮寫。2.假定List是個類名,List x和 List x()的區別:前者聲明了一個List對象,後者則是一個函數,返回List類型。3.能否在一個建構函式中調用另一個建構函式?答案是否定的。假設類Fro有兩個建構函式Foo::Foo(char
Time of Update: 2018-12-04
實驗程式是用vc6編譯,一定注意副檔名為c,不是cpp,下載前面幾個測試程式(鏈表、表、原子中有下載連結)中直接將下面來源程式覆蓋1.c的內容即可!再次強烈建議在這些函數上設上斷點,按F11跟進去把源碼走一遍,才有真正的學習效果!來源程式如下:#include <stdio.h>#include <string.h>#include "include/Fmt.h"#include "include/Str.h"#pragma comment(lib,
Time of Update: 2018-12-04
實驗程式是用vc6編譯,一定注意副檔名為c,不是cpp,下載前面幾個測試程式(鏈表、表、原子中有下載連結)中直接將下面來源程式覆蓋1.c的內容即可!強烈建議在這些函數上設上斷點,按F11跟進去把源碼走一遍!來源程式如下:#include <stdio.h>#include <string.h>#include "include/bit.h"#pragma comment(lib, "libcii.lib")//列印函數void Print(int n, int bit,
Time of Update: 2018-12-04
實驗程式是用vc6編譯,一定注意副檔名為c,不是cpp,下載前面幾個測試程式(鏈表、表、原子中有下載連結)中直接將下面來源程式覆蓋1.c的內容即可!再次強烈建議在這些介面函數上設上斷點,按F11跟進去把源碼走一遍!才會獲得大師們真正的深刻思想來源程式如下:#include <stdio.h>#include <string.h>#include "include/Str.h"#include "include/fmt.h"#pragma comment(lib,
Time of Update: 2018-12-04
當以指標作為參數,在函數中分配記憶體的時候,其操作要格外小心。 ====================#include<stdio.h>#include<string.h>#include<stdlib.h>#include<iostream.h>void fun(int *p){ cout<<"fun 1:"<<endl; cout<<p<<endl; cout<<*p<<