我一直在用 C 語言處理文本檔案,發現宏在與文本檔案互動時變得很奇怪。
那么有人可以向我解釋為什么這會編譯......
#include <stdio.h>
#include <stdlib.h>
#define FILENAME "Distribution.txt"
int main()
{
float zvalue[13][10];
FILE *fp;
fp = fopen("Distribution.txt", "r");
for (int a=0; a<13; a ) {
for (int b=0; b<10; b ) {
fscanf(fp, "%d", &zvalue[a][b]);
}
}
printf("%f", zvalue[0][0]);
fclose(fp);
return 0;
//This compiles
}
但是當第三行改為 FILE 而不是 FILENAME 時,它不會?
#include <stdio.h>
#include <stdlib.h>
#define FILE "Distribution.txt"
int main()
{
float zvalue[13][10];
FILE *fp;
fp = fopen("Distribution.txt", "r");
for (int a=0; a<13; a ) {
for (int b=0; b<10; b ) {
fscanf(fp, "%d", &zvalue[a][b]);
}
}
printf("%f", zvalue[0][0]);
fclose(fp);
return 0;
//This does not compile
}
```
uj5u.com熱心網友回復:
FILE由 C 標準定義。它是fopen回傳指標的型別。如果您在代碼中向下查看幾行,您可以看到您正在FILE為此目的使用。因此,重新定義它會導致各種問題,您不應該這樣做。
uj5u.com熱心網友回復:
宏是自動復制/粘貼的。
當你寫
#define FILE "Distribution.txt"
它告訴編譯器,從現在開始,無論何時你寫FILE,它都應該假裝你寫了"Distribution.txt"。
那么當它看到這一行時:
FILE *fp;
它假裝你寫了這一行:
"Distribution.txt" *fp;
這是無效的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/357591.html
上一篇:我如何在c中創建一個計數器?
下一篇:c中printf中的意外換行符
