編譯階段c語言類型檢測
❶ c語言,如何檢測變數的數據類型
c語言沒有檢查變數類型的函數,在C語言中定義的變數,只是根據變數類型來分配默認的存儲空間大小,而不記錄空間中存儲的具體的值的類型。比如定義的字元類型可以當整形來用,可以直接在上面加減一個數值。
數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。
變數是用來存儲值的所在處,它們有名字和數據類型。變數的數據類型決定了如何將代表這些值的位存儲到計算機的內存中。在聲明變數時也可指定它的數據類型。所有變數都具有數據類型,以決定能夠存儲哪種數據。
數據類型包括原始類型、多元組、記錄單元、代數數據類型、抽象數據類型、參考類型以及函數類型。
❷ VS2010編譯C語言程序時提示 語法錯誤「類型」該怎麼解決
這語句沒有錯誤,只不過你名字取錯了。
自定義函數sqrtf與powf函數早已存在,你把名字換一下就可以通過編譯了
❸ 編譯原理實驗「C語言」檢查某段C源程序中,標識符的使用是否正確,即是否先聲明後使用,或
#include "stdio.h" /*定義I/O庫所用的某些宏和變數*/
#include "string.h" /*定義字元串庫函數*/
#include "conio.h" /*提供有關屏幕窗口操作函數*/
#include "ctype.h" /*分類函數*/
char prog[80]=,
token[8]; /*存放構成單詞符號的字元串*/
char ch;
int syn, /*存放單詞字元的種別碼*/
n,
sum, /*存放整數型單詞*/
m,p; /*p是緩沖區prog的指針,m是token的指針*/
char *rwtab[6]=;
void scaner(){
m=0;
sum=0;
for(n=0;n<8;n++)
token[n]='\0';
ch=prog[p++];
while(ch==' ')
ch=prog[p++];
if(isalpha(ch)) /*ch為字母字元*/{
while(isalpha(ch)||isdigit(ch)) /*ch 為字母字元或者數字字元*/{
token[m++]=ch;
ch=prog[p++];}
token[m++]='\0';
ch=prog[p--];
syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0) /*字元串的比較*/{
syn=n+1;
break;}}
else
if(isdigit(ch)) /*ch是數字字元*/{
while(isdigit(ch)) /*ch是數字字元*/{
sum=sum*10+ch-'0';
ch=prog[p++];}
ch=prog[p--];
syn=11;}
else
switch(ch){
case'<':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='>'){
syn=21;
token[m++]=ch;}
else if(ch=='='){
syn=22;
token[m++]=ch;}
else{
syn=20;
ch=prog[p--];}
break;
case'>':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='='){
syn=24;
token[m++]=ch;}
else{
syn=23;
ch=prog[p--];}
break;
case':':m=0;token[m++]=ch;ch=prog[p++];
if(ch=='='){
syn=18;
token[m++]=ch;}
else{
syn=17;
ch=prog[p--];}
break;
case'+':syn=13;token[0]=ch;break;
case'-':syn=14;token[0]=ch;break;
case'*':syn=15;token[0]=ch;break;
case'/':syn=16;token[0]=ch;break;
case'=':syn=25;token[0]=ch;break;
case';':syn=26;token[0]=ch;break;
case'(':syn=27;token[0]=ch;break;
case')':syn=28;token[0]=ch;break;
case'#':syn=0;token[0]=ch;break;
default:syn=-1;}}
main()
{
printf("\n\nThe significance of the figures:\n"
"1.figures 1 to 6 said Keyword\n"
"2.figures 10 and 11 said Other indicators\n"
"3.figures 13 to 28 said Operators\n");
p=0;
printf("\nplease input string:\n");
do {
ch=getchar();
prog[p++]=ch;
}while(ch!='#');
p=0;
do{
scaner();
switch(syn){
case 11: printf("(%d,%d)\n",syn,sum);break;
case -1: printf("\n ERROR;\n");break;
default: printf("(%d,%s)\n",syn,token);
}
}while(syn!=0);
getch();
}
程序測試結果
對源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,經過詞法分析後輸出如下圖5-1所示:
具體的你在修改修改吧
❹ C語言問題,求助,,自己編了一個程序,可編譯的時候說類型錯誤,求指教
你的主函數類型是int 所以在return後面加個int類型的返回,不返回的話可以寫個0;
❺ 判斷C語言數值常量是否合法為什麼不合法
12. 0Xa23 4.5e0,-0xf .5e-3 .177合法。
實數型常量:必須有小數點,例如定義double a=1就是錯誤的,必須寫成double a=1.0,另外寫成a=1,0中間是逗號,就更是錯誤的了。
e與E表示以10為底數的冪數,且e與E後面必須跟整數,若是小數也是錯誤的,例如3.2e1.5 ,這里1.5是小數,所以錯的。
(5)編譯階段c語言類型檢測擴展閱讀:
注意事項:
const只修飾其後的變數,至於const放在類型前還是類型後並沒有別。如const int a和int const a都是修飾a為const。注意*不是一種類型,如果*pType之前是某類型,那麼pType是指向該類型的指針一個簡單的判斷方法,指針運算符*,是從右到左。
C語言編譯主要分為編譯和鏈接兩部分,之所以const修飾的變數變為只讀是因為在變數前加了const修飾,如果程序試圖去修改此變數的值,那麼編譯器在編譯階段檢查語法錯誤的時候將報錯,這很好理解,這就是C語言規定的語法,違反了將提示相應的錯誤。
❻ 測試C語言編譯系統中各基本類型的數據所佔的位元組數
你是不是沒有編譯環境?
可以試試wxgcc,一鍵完成編譯,結果立即顯示。
❼ 編譯階段 (C語言)到底指的是什麼階段呀
編譯和鏈接過程,把C語言源程序翻譯為可以執行的exe文件(或者dll、com)。
編譯則是把C語言程序翻譯為機器指令,CPU可以執行指令,但無法執行C語言源程序,所以需要一個翻譯,編譯就是這個過程。
❽ 關於C語言編譯階段的一些問題
呵呵,找一本好書吧。我不能完全給你寫清楚,"sting.h"的拼寫已經有人說了。
簡單地說,要理解幾種文件:
A:源文件:例如匯編(asm)、c語言、cpp
B:目標文件
C:庫文件(lib)
D:可執行文件
A經過編譯器得到B,若干個B可以經過庫管理程序得到C,C也可以通過庫管理程序得到B(提取)
若干個B通過鏈接器可以得到D,但是比如strcmp是出現在C中的,但實際上鏈接器會到C中提取出strcmp所在的B,然後將這個B放入到你的D中。整過過程是一個求閉包的過程,具體參見《Linker and Loader》。
最後說說.h,其實.h本身並不是必要的,但是它可以減少人們的錯誤,減少重復的代碼。
比如printf,你完全可以不include<stdio.h>,你就自己寫上一行:
int printf(...);
然後你後面就是直接使用就好了,但是這樣會有很多缺陷,這些缺陷可能只有你深刻地理解C語言本身的缺陷後才能明白,不多說了。
❾ C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(9)編譯階段c語言類型檢測擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。