❶ 在c語言中,自定義標識符的規則有哪些
C語言中自定義標識符規則有以下5條:
1.標識符只能由字母,數字,和下劃線組成,其他字元是非法的。
2.標識符第一個字元必須為字母或者為下劃線。舉個例子:char 66A為非法定義(因為首字元為數字)char A66則為正確的標識符定義。
3.C語言中的標識符中大小寫是有區別的,舉個例子:int A和int a 這兩個定義是不同的,A 和a為兩個不同的整形變數。
4.標識符的最大長度僅為8個位元組,如有多餘的位元組將被忽略。所以對於 int student666 和student 999在C語言中將被認為是兩個相同的變數。
5.C語言的標識符定義不能與C語言預設關鍵字重名。常見的關鍵字有:int if else switch printf define等等。具體的需要查看C語言技術文檔。
參考資料來源:網路-標識符
❷ 在C語言中,自定義標識符的規則有哪些
在C語言中,自定義標識符的規則有:
1、第一個字元必須是字母(不分大小寫)或下劃線(_);
2、後跟字母(不分大小寫)、下劃線(_)或數字組成;
3、標識符中的大小寫字母有區別。如,變數sum,sum,sum代表三個不同的變數;
4、不能與c編譯系統已經預定義的、具有特殊用途的保留標識符(即關鍵字)同名。比如,不能將標識符命名為float,auto,break,case,this,try,for,while,int,char,short,unsigned等等。
(2)給出C語言標識符id的正則定義擴展閱讀:
在程序設計語言中,標識符是用作程序的某一元素的名字的字元串或用來標識源程序中某個對象的名字的 。這個元素可以是一個語句標號,一個過程或函數、一個數據元素(例如一個標量變數或一個數組)或程序本身。最通常是,標識符這個字幾乎與變數名同義地使用。
❸ C語言標識符的命名規則有哪些
C語言標識符的命名規則有:
1、有效字元:只能由字母、數字和下劃線組成,且以字母或下劃線開頭。
2、有效長度:隨系統而異,但至少前8個字元有效。如果超長,則超長部分被舍棄。
例如,由於student_name和student_number的前8個字元相同,有的系統認為這兩個變數,是一回事而不加區別。在TCV2.0中,變數名(標識符)的有效長度為1~32個字元,預設值為32。
3、C語言的關鍵字不能用作變數名。
(3)給出C語言標識符id的正則定義擴展閱讀
C語言標識符使用注意事項
1、標識符由字母(A-Z,a-z)、數字(0-9)、下劃線「_」組成,並且首字元不能是數字,但可以是字母或者下劃線。例如,正確的標識符:abc,a1,prog_to。
2、不能把C語言關鍵字作為用戶標識符,例如if,for,while等。
3、標識符長度是由機器上的編譯系統決定的,一般的限制為8字元(註:8字元長度限制是C89標准,C99標准已經擴充長度,其實大部分工業標准都更長)。
4、標識符對大小寫敏感,即嚴格區分大小寫。一般對變數名用小寫,符號常量命名用大寫。
❹ c語言如何定義標識符
隨意定義,字母數字下劃線組成,不能數字開頭。滿足這個條件就可以。
❺ C語言的標識符的定義是什麼
標示符(identifier)是指用來標識某個實體的一個符號。在不同的應用環境下有不同的含義。
在日常生活中,標示符是用來指定某個東西、人,要用到它,他或她的名字;在數學中解方程時,我們也常常用到這樣或那樣的變數名或函數名;在編程語言中,標識符是用戶編程時使用的名字,對於變數、常量、函數、語句塊也有名字;我們統統稱之為標識符。
標識符可能是字、編號、字母、符號,也可能是由上述元素所組成。
❻ 編譯原理:c語言標識符的正則表達式
C語言中的標識符:
標識符由字母、數字、下劃線「_」組成,並且首字母不能是數字.
java語言中的標識符:
標識符由字母、數字、下劃線「_」、美元符號「$」組成,並且首字母不能是數字。
一般標識符由字母、數字、下劃線「_」組成
如果只能以下劃線、英文字母開頭,後跟單詞字元的話:
^[A-Za-z_][A-Za-z0-9_]*$
❼ 如何使用正則表達式匹配C語言的變數名定義規則
需要使用一個字元串作為c語言中的變數名,這個字元串必須滿足下面的要求:
1.只包含數字,ASCII字母,下劃線
2.以字母或者下劃線開頭
❽ C語言標識符的命名規則是什麼請舉例說明
C語言的標識符一般應遵循如下的命名規則:
1、標識符必須以字母a~z、 A~Z或下劃線開頭,後面可跟任意個(可為0)字元,這些字元可以是字母、下劃線和數字,其他字元不允許出現在標識符中。
2、標識符區分大小寫字母;
3、標識符的長度,c89規定31個字元以內,c99規定63個字元以內;
4、C語言中的關鍵字,有特殊意義,不能作為標識符;
5、自定義標識符最好取具有一定意義的字元串,便於記憶和理解。
(8)給出C語言標識符id的正則定義擴展閱讀:
C語言中預先定義了一些標識符,他們有特定的含義,通常用做固定的庫函數名或預編譯處理中的專門命令。如scanf、printf、sin、define、include等。
C語言允許用戶標識符與預定義標識符同名,但這將使這些標識符失去系統規定的原意。為了避免誤解,建議用戶為標識符取名時盡量不要與系統預先定義的標准標識符(如標准函數)同名。
❾ C語言怎麼用正則表達式
如何在C語言中巧用正則表達式
看到大家討論這方面的東西,作點貢獻聊表各位高手對這個版快的無私奉獻 :oops:
如果用戶熟悉Linux下的sed、awk、grep或vi,那麼對正則表達式這一概念肯定不會陌生。由於它可以極大地簡化處理字元串時的復雜
度,因此現在已經在許多Linux實用工具中得到了應用。千萬不要以為正則表達式只是Perl、Python、Bash等腳本語言的專利,作為C語言程序
員,用戶同樣可以在自己的程序中運用正則表達式。
標準的C和C++都不支持正則表達式,但有一些函數庫可以輔助C/C++程序員完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函數庫。
編譯正則表達式
為了提高效率,在將一個字元串與正則表達式進行比較之前,首先要用regcomp()函數對它進行編譯,將其轉化為regex_t結構:
int regcomp(regex_t *preg, const char *regex, int cflags);
參數regex是一個字元串,它代表將要被編譯的正則表達式;參數preg指向一個聲明為regex_t的數據結構,用來保存編譯結果;參數cflags決定了正則表達式該如何被處理的細節。
如果函數regcomp()執行成功,並且編譯結果被正確填充到preg中後,函數將返回0,任何其它的返回結果都代表有某種錯誤產生。
匹配正則表達式
一旦用regcomp()函數成功地編譯了正則表達式,接下來就可以調用regexec()函數完成模式匹配:
int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags);
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
參數preg指向編譯後的正則表達式,參數string是將要進行匹配的字元串,而參數nmatch和pmatch則用於把匹配結果返回給調用程序,最後一個參數eflags決定了匹配的細節。
在調用函數regexec()進行模式匹配的過程中,可能在字元串string中會有多處與給定的正則表達式相匹配,參數pmatch就是用來保
存這些匹配位置的,而參數nmatch則告訴函數regexec()最多可以把多少個匹配結果填充到pmatch數組中。當regexec()函數成功返
回時,從string+pmatch[0].rm_so到string+pmatch[0].rm_eo是第一個匹配的字元串,而從
string+pmatch[1].rm_so到string+pmatch[1].rm_eo,則是第二個匹配的字元串,依此類推。
釋放正則表達式
無論什麼時候,當不再需要已經編譯過的正則表達式時,都應該調用函數regfree()將其釋放,以免產生內存泄漏。
void regfree(regex_t *preg);
函數regfree()不會返回任何結果,它僅接收一個指向regex_t數據類型的指針,這是之前調用regcomp()函數所得到的編譯結果。
如果在程序中針對同一個regex_t結構調用了多次regcomp()函數,POSIX標准並沒有規定是否每次都必須調用regfree()函
數進行釋放,但建議每次調用regcomp()函數對正則表達式進行編譯後都調用一次regfree()函數,以盡早釋放佔用的存儲空間。
報告錯誤信息
如果調用函數regcomp()或regexec()得到的是一個非0的返回值,則表明在對正則表達式的處理過程中出現了某種錯誤,此時可以通過調用函數regerror()得到詳細的錯誤信息。
size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
參數errcode是來自函數regcomp()或regexec()的錯誤代碼,而參數preg則是由函數regcomp()得到的編譯結果,
其目的是把格式化消息所必須的上下文提供給regerror()函數。在執行函數regerror()時,將按照參數errbuf_size指明的最大字
節數,在errbuf緩沖區中填入格式化後的錯誤信息,同時返回錯誤信息的長度。
應用正則表達式
最後給出一個具體的實例,介紹如何在C語言程序中處理正則表達式。
#include <stdio.h>;
#include <sys/types.h>;
#include <regex.h>;
/* 取子串的函數 */
static char* substr(const char*str, unsigned start, unsigned end)
{
unsigned n = end - start;
static char stbuf[256];
strncpy(stbuf, str + start, n);
stbuf[n] = 0;
return stbuf;
}
/* 主程序 */
int main(int argc, char** argv)
{
char * pattern;
int x, z, lno = 0, cflags = 0;
char ebuf[128], lbuf[256];
regex_t reg;
regmatch_t pm[10];
const size_t nmatch = 10;
/* 編譯正則表達式*/
pattern = argv[1];
z = regcomp(®, pattern, cflags);
if (z != 0){
regerror(z, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern);
return 1;
}
/* 逐行處理輸入的數據 */
while(fgets(lbuf, sizeof(lbuf), stdin)) {
++lno;
if ((z = strlen(lbuf)) >; 0 && lbuf[z-1] == '\n')
lbuf[z - 1] = 0;
/* 對每一行應用正則表達式進行匹配 */
z = regexec(®, lbuf, nmatch, pm, 0);
if (z == REG_NOMATCH) continue;
else if (z != 0) {
regerror(z, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "%s: regcom('%s')\n", ebuf, lbuf);
return 2;
}
/* 輸出處理結果 */
for (x = 0; x < nmatch && pm[x].rm_so != -1; ++ x) {
if (!x) printf("%04d: %s\n", lno, lbuf);
printf(" $%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));
}
}
/* 釋放正則表達式 */
regfree(®);
return 0;
}
上述程序負責從命令行獲取正則表達式,然後將其運用於從標准輸入得到的每行數據,並列印出匹配結果。執行下面的命令可以編譯並執行該程序:
# gcc regexp.c -o regexp
# ./regexp 'regex[a-z]*' < regexp.c
0003: #include <regex.h>;
$0='regex'
0027: regex_t reg;
$0='regex'
0054: z = regexec(®, lbuf, nmatch, pm, 0);
$0='regexec'
小結
對那些需要進行復雜數據處理的程序來說,正則表達式無疑是一個非常有用的工具。本文重點在於闡述如何在C語言中利用正則表達式來簡化字元串處理,以便在數據處理方面能夠獲得與Perl語言類似的靈活性。