在移植c++代碼到c的時候,經常會出現一個奇怪的錯誤,
error C2275: “XXX”: 將此類型用作表達式非法
表達式非法,這個錯誤是由於c的編譯器要求將變量的申明放在一個函數塊的頭部,而c++沒有這樣的要求造成的。
解決的辦法就是把變量的申明全部放在變量的生存塊的開始。
初學C語言,這是我寫的一個程序: #include <stdio.h> #include <string.h> int main(void) { char fname[20],lname[20]; int n,m;
printf("Please enter your first name:\n"); scanf("%s",&fname); printf("Please enter your last name:\n"); scanf("%s",&lname); n = strlen(fname); m = strlen(lname);
printf("%s %s\n",fname,lname); printf("%*d %*d\n",n,n,m,m); printf("%s %s\n",fname,lname); printf("%-*d %-*d",n,n,m,m);
getch(); return 0; } 當我把int n,m;放在scanf()后一句,程序就要報錯,而把int n,m;放在開頭就沒有錯。這是什么原因?不是說只要在首次使用變量前聲明變量就可以了嗎?
這個跟編譯器的原理有關系。大部分的c語言編譯器要求變量的聲明在程序最前面。所以當你將聲明移到scanf下面時,會出現這種錯誤。而c++則不會。