本文目錄一覽:
C語言的全部命令??
你是說關鍵字吧!
由ANSI標準定義的C語言關鍵字共32個 :
auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static
根據關鍵字的作用,可以將關鍵字分為數據類型關鍵字和流程控制關鍵字兩大類。
1 數據類型關鍵字
A基本數據類型(5個)
void :聲明函數無返回值或無參數,聲明無類型指針,顯式丟棄運算結果
char :字符型類型數據,屬於整型數據的一種
int :整型數據,通常為編譯器指定的機器字長
float :單精度浮點型數據,屬於浮點數據的一種
double :雙精度浮點型數據,屬於浮點數據的一種
B 類型修飾關鍵字(4個)
short :修飾int,短整型數據,可省略被修飾的int。
long :修飾int,長整形數據,可省略被修飾的int。
signed :修飾整型數據,有符號數據類型
unsigned :修飾整型數據,無符號數據類型
C 複雜類型關鍵字(5個)
struct :結構體聲明
union :共用體聲明
enum :枚舉聲明
typedef :聲明類型別名
sizeof :得到特定類型或特定類型變量的大小
D 存儲級別關鍵字(6個)
auto :指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配
static :指定為靜態變量,分配在靜態變量區,修飾函數時,指定函數作用域為文件內部
register :指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數
extern :指定對應變量為外部變量,即在另外的目標文件中定義,可以認為是約定由另外文件聲明的韻蟮囊桓觥耙�謾?
const :與volatile合稱“cv特性”,指定變量不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)
volatile :與const合稱“cv特性”,指定變量的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變量的值
2 流程控制關鍵字
A 跳轉結構(4個)
return :用在函數體中,返回特定值(或者是void值,即不返回值)
continue :結束當前循環,開始下一輪循環
break :跳出當前循環或switch結構
goto :無條件跳轉語句
B 分支結構(5個)
if :條件語句
else :條件語句否定分支(與if連用)
switch :開關語句(多重分支語句)
case :開關語句中的分支標記
default :開關語句中的“其他”分治,可選。
C 循環結構(3個)
for :for循環結構,for(1;2;3)4;的執行順序為1-2-4-3-2…循環,其中2為循環條件
do :do循環結構,do 1 while(2); 的執行順序是 1-2-1…循環,2為循環條件
while :while循環結構,while(1) 2; 的執行順序是1-2-1…循環,1為循環條件
以上循環語句,當循環條件表達式為真則繼續循環,為假則跳出循環。
C語言中“語句”和“指令”有什麼區別?
區別一:構成不一樣
1、C程序的執行部分是由語句組成的。 程序的功能也是由執行語句實現的。
2、指令可以使編譯器按不同的條件編譯不同的程序部分,因而產生不同的目標代碼文件。這對於程序的移植和調試是很有用的,尤其是針對於跨平台程序移植的時候。
區別二:實現功能不一樣
1、C程序語言可以實現多種程序結構, 即順序結構、分支(選擇)結構、循環結構。
2、指令可以實現源代碼的部分編譯功能,可以根據表達式的值或者某個特定的宏來確定編譯條件,以決定編譯哪些代碼,不編譯哪些。
擴展資料
C語言表達式語句
表達式語句由表達式加上分號“;”組成。
其一般形式為:表達式;執行表達式語句就是計算表達式的值和執行副作用。
例如: x=y+z;a=520;賦值語句;
y+z;加法運算語句,但計算結果不能保留,無實際意義;
i++; 自增1語句,i值增1。
i++; 是先運算i後再加1。
++i; 是先把i值增1後運算。
包括空語句,函數調用語句在內都屬於表達式語句。
C語言條件編譯指令
1、#if指令
該指令檢測表達式值是否為真。如果表達式的值為真,則編譯後面的代碼直到出現 #else、#elif 或 #endif 為止,否則不編譯。
2、#endif指令
該指令用於終止 #if 指令。
3、#else指令
該指令用於 #if 指令之後,當前面的 #if 指令的條件不為真時,就編譯 #else 後面的代碼。
4、#elif指令
該指令綜合了 #else 和 #if 指令的作用。下面的示例代碼演示了 #if、#else、#elif 與 #endif 的組合使用情況。
參考資料來源:百度百科—C語言基礎語句
c語言指令有哪些啊
第一章:緒論?
內核版本號格式:x.y.zz-www/x為主版本號,y為次版本號,zz為次次版本號,www為發行號/次版本號改變說明內核有重大變革,其偶數為穩定版本,奇數為尚在開發中的版本
第二章:基礎?
文件種類:-:txt,二進制/d:目錄/l:鏈接文件(link)/b:區塊設備文件/c:字符設備文件/p:管道
目錄結構:bin:可執行/boot:開機引導/dev:設備文件/etc:系統配置文件/lib:庫文件/mnt:設備掛載點/var:系統日誌/
命令:rmdir:刪除空目錄/find [path] [expression]/touch命令還可以修改指定文件的最近一次訪問時間/tar -czvf usr.tar.gz path/tar –zxvf usr.tar.gz/tar –cjvf usr.tar.bz2 path/tar –jxvf usr.tar.bz2
gcc:預處理:-g/I在頭文件搜索路徑中添加目錄,L在庫文件搜索路徑中
gdb:設置斷點:b/查看斷點信息:info
Makefile:make –f other_makefile/:第一個依賴文件的名稱/@:目標文件的完整名稱/^:所有不重複的依賴文件/+:所有依賴文件(可能重複)
第三章:文件IO
read:read(fd, temp, size); /讀fd中長度為size的值到temp/返回0表示file為NULL
write:write(fd, buf, buf_size); /寫長度為buf_size的buf內容到fd中
lseek:lseek(fd, offset, SEEK_SET); /從文件開頭向後增加offset個位移量
unlink:從文件系統中刪除一個名字
open1:int open(const char * pathname, int flags, mode_t mode);/flags為讀寫方式/mode為權限設置/O_EXCL:測試文件是否存在/O_TRUNC:若存在同名文件則刪除之並新建
open2:注意O_NONBLOCK
mmap.1:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize);
mmap.2:mmap(start_addr, flength, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
fcntl:上鎖/int fcntl(int fd, int cmd, struct flock * lock);/對誰;做什麼;設置所做內容
select:fd_max+1,回傳讀狀況,回傳寫狀況,回傳異常,select等待的時間/NULL為永遠等待/0為從不等待/凡需某狀況則用之,反則(fd_set *)NULL之
FD_*那幾個函數……
一般出錯則返回-1
第四章:文件與目錄
硬鏈接與符號鏈接?
chdir改變目錄
0:in/1:out/2:err
第五章:內存管理
可執行文件存儲時:代碼區、數據區和未初始化區
棧:by編譯器,向低址擴展,連續,效率高/堆:by程序員
/etc/syslog.conf,系統log記錄文件/優先級為-20時最高
第六章:進程和信號
程序代碼、數據、變量、文件描述符和環境/init的pid為1
execl族:int execl(const char * path, const char * arg, ….);/path即可執行文件的路徑,一般為./最後一個參數以NULL結束
waitpid:waitpid(pid_t pid,int * status,int options);/option:一般用WNOHANG,沒有已經結束的子進程則馬上返回,不等待
kill:int kill(pid_t pid,int sig);/發送信號sig給pid
void (*signal(int signum, void(* handler)(int)))(int);/第一個參數被滿足時,執行handler/第一個參數常用:SIG_IGN:忽略信號/SIG_DFL:恢復默認信號
第七章:線程
sem_init(sem_t *sem, int pshared, unsigned int value)/pshared為0/value即初始值
第八章:管道
1:write/0:read
第九章:信號量、共享內存和消息隊列
臨界資源:操作系統中只允許一個進程訪問的資源/臨界區:訪問臨界資源的那段代碼
信號量:建立聯繫(semget),然後初始化,PV操作,最後destroy
共享內存沒有提供同步機制
第十章:套接字
UDP:無連接協議,無主客端的區分/實時性
TCP:字節流/數據可靠性/網絡可靠性
數據報:SOCK_STREAM/SOCK_DGRAM
其它
管道一章的both_pipe即父子進程間的全雙工管道通訊
關係到信號和互斥的服務器-客戶端程序
線程一章的class的multi_thread文件夾下的thread8.c
int main(void)
{
int data_processed;
int file_pipes_1[2];
int file_pipes_2[2];
char buffer[BUFSIZ + 1];
const char some_data[] = “123”;
const char ch2p[] = “this is the string from child to the parent!”;
const char p2ch[] = “this is the string from parent to the child!”;
pid_t fork_result;
memset(buffer,’\0′,sizeof(buffer));
if(pipe(file_pipes_1) == 0){
if(pipe(file_pipes_2) == 0){
fork_result = fork();
switch(fork_result){
case -1:
perror(“fork error”);
exit(EXIT_FAILURE);
case 0://child
close(file_pipes_1[1]);
close(file_pipes_2[0]);
printf(“in the child!\n”);
read(file_pipes_1[0],buffer, BUFSIZ);
printf(“in the child, read_result is \”%s\”\n”,buffer);
write(file_pipes_2[1],ch2p, sizeof(ch2p));
printf(“in the child, write_result is \”%s\”\n”,ch2p);
exit(EXIT_SUCCESS);
default://parent
close(file_pipes_1[0]);
close(file_pipes_2[1]);
printf(“in the parent!\n”);
write(file_pipes_1[1], p2ch, sizeof(p2ch));
printf(“in the parent, write_result is \”%s\”\n”,p2ch);
read(file_pipes_2[0],buffer, BUFSIZ);
printf(“in the parent, read_result is \”%s\”\n”,buffer);
exit(EXIT_SUCCESS);
}
}
}
}
#ifndef DBG
#define DBG
#endif
#undef DBG
#ifdef DBG
#define PRINTF(fmt, args…) printf(“file-%s line-%d: ” \
fmt, __FILE__, __LINE__, ##args)
#else
#define PRINTF(fmt, args…) do{}while(0);
#endif
int main(void)
{
PRINTF(“%s\n”, “hello!”);
fprintf(stdout, “hello hust!\n”);
return 0;
}
#define N 5
#define MAX 5
int nput = 0;
char buf[MAX][50];
char *buffer = “abcdefghijklmnopqrstuvwxyz0123456789”;
char buf_r[100];
sem_t mutex,full,avail;
void *productor(void *arg);
void *consumer(void *arg);
int i = 0;
int main(int argc, char **argv)
{
int cnt = -1;
int ret;
int nput = 0;
pthread_t id_produce[10];
pthread_t id_consume;
ret = sem_init(mutex, 0, 1);
ret = sem_init(avail, 0, N);
ret = sem_init(full, 0, 0);
for(cnt = 0; cnt 6; cnt ++ ){
//pthread_create(id_produce[cnt], NULL, (void *)productor, cnt);
pthread_create(id_produce[cnt], NULL, (void *)productor, (void *)cnt);
}
pthread_create(id_consume, NULL, (void *)consumer, NULL);
for(cnt = 0; cnt 6; cnt ++){
pthread_join(id_produce[cnt], NULL);
}
pthread_join(id_consume,NULL);
sem_destroy(mutex);
sem_destroy(avail);
sem_destroy(full);
exit(EXIT_SUCCESS);
}
void *productor(void *arg)
{
while(1){
sem_wait(avail);
sem_wait(mutex);
if(nput = MAX * 3){
sem_post(avail);
//sem_post(full);
sem_post(mutex);
return NULL;
}
sscanf(buffer + nput, “%s”, buf[nput % MAX]);
//printf(“write[%d] \”%s\” to the buffer[%d]\n”, (*(int*)arg), buf[nput % MAX],nput % MAX);
printf(“write[%d] \”%s\” to the buffer[%d]\n”, (int)arg, buf[nput % MAX],nput % MAX);
nput ++;
printf(“nput = %d\n”, nput);
sem_post(mutex);
sem_post(full);
}
return NULL;
}
void *consumer(void *arg)
{
int nolock = 0;
int ret, nread, i;
for(i = 0; i MAX * 3; i++)
{
sem_wait(full);
sem_wait(mutex);
memset(buf_r, 0, sizeof(buf_r));
strncpy(buf_r, buf[i % MAX], sizeof(buf[i % MAX]));
printf(“read \”%s\” from the buffer[%d]\n\n”,buf_r, i % MAX);
sem_post(mutex);
sem_post(avail);
//sleep(1);
}
return NULL;
}
C語言指令?
函數原型
char *fgets(char *buf, int bufsize, FILE *stream);
參數
*buf: 字符型指針,指向用來存儲所得數據的地址。
bufsize: 整型數據,指明存儲數據的大小。
*stream: 文件結構體指針,將要讀取的文件流。
第三個參數是指向文件的指針
C語言中的命令
函數名: line
功 能: 在指定兩點間畫一直線
原 形: void far line(int x0, int y0, int x1, int y1);
頭文件:graphics.h
參數:x0,y0為直線初始坐標,X1,Y1為末坐標
程序例:
#include “graphics.h”
#include “stdlib.h”
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int xmax, ymax;
/* initialize graphics and local variables */
initgraph(gdriver, gmode, “”);
/* read result of initialization */
errorcode = graphresult();
/* an error occurred */
if (errorcode != grOk)
{
printf(“Graphics error: %s\n”,
grapherrormsg(errorcode));
printf(“Press any key to halt:”);
getch();
exit(1);
}
setcolor(getmaxcolor());
xmax = getmaxx();
ymax = getmaxy();
/* draw a diagonal line */
line(0, 0, xmax, ymax);
/* clean up */
getch();
closegraph(); /*關閉圖形模式*/
return 0;
}
#line
命令# line改變_LINE_ 與_ F I L E _的內容,它們是在編譯程序中預先定義的標識符。
命令的基本形式如下:
# line number[“filename”]
其中的數字為任何正整數,可選的文件名為任意有效文件標識符。行號為源程序中當前行號,文件名為源文件的名字。命令# line主要用於調試及其它特殊應用。
例如,下面說明行計數從1 0 0開始;printf( ) 語句顯示數1 0 2,因為它是語句#line 100後的第3行。
#line 100 /* 初始化行計數器* /
main ( ) /* 行號100 */
{ /* 行號101 */
p r i n t f ( ” % d \ n ” ,_ line _ ) ; /* 行號102 */
}
C語言的按照標識符、關鍵字、常用編譯指令有哪些?
我們可以在C源程序中插入傳給編譯程序的各中指令,這些指令被稱為預處理器指令,它們擴充了程序設計的環境。現把常用的預處理命令總結如下:
1. 預處理程序
按照ANSI標準的定義,預處理程序應該處理以下指令:
#if #ifdef #ifndef #else #elif
#endif
#define
#undef
#line
#error
#pragma
#include
顯然,上述所有的12個預處理指令都以符號#開始,,每條預處理指令必須獨佔一行。
2. #define
#define指令定義一個標識符和一個串(也就是字符集),在源程序中發現該標識符時,都用該串替換之。這種標識符稱為宏名字,相應的替換稱為宏代換。一般形式如下:
#define macro-name char-sequence
這種語句不用分號結尾。宏名字和串之間可以有多個空白符,但串開始後只能以新行終止。
例如:我們使用LEFT代表1,用RIGHT代表0,我們使用兩個#define指令:
#define LEFT 1
#define RIGHT 0
每當在源程序中遇到LEFT或RIGHT時,編譯程序都用1或0替換。
定義一個宏名字之後,可以在其他宏定義中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
宏代換就是用相關的串替代標識符。因此,如果希望定義一條標準錯誤信息時,可以如下定義:
#define ERROR_MS “Standard error on input \n”
如果一個串長於一行,可在行尾用反斜線”\”續行,如下:
#define LONG_STRING “This is a very very long \
String that is used as an example”
3. #error
#error指令強制編譯程序停止編譯,它主要用於程序調試。#error指令的一般形式是:
#error error-message
注意,宏串error-message不用雙引號包圍。遇到#error指令時,錯誤信息被顯示,可能同時還顯示編譯程序作者預先定義的其他內容。
4. #include
程序中的#include指令要求編譯程序讀入另一個源文件。被讀入文件的名字必須用雙引號(“”)或一對尖括號()包圍,例如:
#include “stdio.h”
#include stdio.h
都使C編譯程序讀入並編譯頭文件以用於I/O系統庫函數。
包含文件中可以包含其他#include指令,稱為嵌套包含。允許的最大嵌套深度隨編譯器而變。
文件名被雙括號或尖括號包圍決定了對指定文件的搜索方式。文件名被尖括號包圍時,搜索按編譯程序作者的定義進行,一般用於搜索某些專門放置包含文件的特殊目錄。當文件名被雙括號包圍時,搜索按編譯程序實時的規定進行,一般搜索當前目錄。如未發現,再按尖括號包圍時的辦法重新搜索一次。
通常,絕大多數程序員使用尖括號包圍標準的頭文件,雙引號用於包圍與當前程序相關的文件名。
5. 條件編譯指令
若干編譯指令允許程序員有選擇的編譯程序源代碼的不同部分,這種過程稱為條件編譯。
5.1#if、#else、#elif #endif
條件編譯指令中最常用的或許是#if,#else,#elif和#endif。這些指令允許程序員根據常數表達式的結果有條件的包圍部分代碼。
#if的一般形式是:
#if constant-expression
Statement sequence
#endif
如#if後的常數表達式為真,則#if和#endif中間的代碼被編譯,否則忽略該代碼段。#endif標記#if塊的結束。
#else指令的作用與C語言的else相似,#if指令失敗時它可以作為備選指令。例如:
#include stdio.h
#define MAX 100
Int main(void)
{
#if MAX99
printf(“Compiled for array greater than 99.\n”);
#else
printf(“Complied for small array.\n”);
#endif
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/235978.html