VS2010編譯報錯的頭疼問題,幫忙看下


#ifdef _WIN32
#include "m_getopt.h"
#include <Windows.h>
void bzero(char *buff,long int size)
{
ZeroMemory(buff,size);
}
#define _stat64i32 stat

int my_stat(const char *path,struct stat *buffer)
{
return _stat(path,buffer);
}
#define  S_ISDIR(model) ((model) & _S_IFDIR)

#define init_srand() srand((unsigned)GetTickCount())
#endif



void _create_rand_string(char *buff,long int size)
{
bzero(buff,size);
init_srand();
int a=33,b=126;
int i;
for(i=0;i<size;i++){
buff[i]=rand()%(b-a+1)+a;
}
}


1>d:\vc++\fileopr\operation.c(8): error C2143: 語法錯誤 : 缺少“;”(在“類型”的前面)
1>d:\vc++\fileopr\operation.c(9): error C2143: 語法錯誤 : 缺少“;”(在“類型”的前面)
1>d:\vc++\fileopr\operation.c(10): error C2065: “i”: 未聲明的標識符
1>d:\vc++\fileopr\operation.c(10): error C2065: “i”: 未聲明的標識符
1>d:\vc++\fileopr\operation.c(10): error C2065: “i”: 未聲明的標識符
1>d:\vc++\fileopr\operation.c(11): error C2065: “i”: 未聲明的標識符
1>d:\vc++\fileopr\operation.c(11): error C2065: “b”: 未聲明的標識符
1>d:\vc++\fileopr\operation.c(11): error C2065: “a”: 未聲明的標識符
1>d:\vc++\fileopr\operation.c(11): error C2065: “a”: 未聲明的標識符

編譯的報錯報的我沒一點頭緒,寫的是.c文件,網上搜索了一大堆也沒找到解決辦法,誰知道怎么解決的,幫下忙

28 个解决方案

#1


報錯的地方就是第二段代碼,很費解啊!

#2


沒人能幫忙解決這個問題么?  在線等着呢。。。。。

#3


C源文件的變量類型申明要放到函數的開始處。

#4


這個我也遇到過。是編譯器的問題,你是在vs環境編譯.c的文件吧。
純c文件在vs中編譯,所有定義必須放在塊的最上面。
int a=33,b=126;   
 int i;
這些定義要放在函數開頭處定義。

這樣寫:
int a=33,b=126;  
  int i;
bzero(buff,size);   
 init_srand();    

#5


哈哈,搶了人家沙發!

#6


先試試將文件名后綴由.c改為.cpp

#7


引用 4 樓 FightForProgrammer 的回復:
這個我也遇到過。是編譯器的問題,你是在vs環境編譯.c的文件吧。
純c文件在vs中編譯,所有定義必須放在塊的最上面。
int a=33,b=126;   
 int i;
這些定義要放在函數開頭處定義。

這樣寫:
int a=33,b=126;  
  int i;
bzero(buff,size);   
 init_srand();    


thanks,我試試,變量還很多。。。

#8


引用 6 樓 zhao4zhong1 的回復:
先試試將文件名后綴由.c改為.cpp


趙大叔,我的源文件就需要時c,不是cpp。。折騰半天我才折騰出來怎么在VS2010里面編譯純C。。

#9


引用 3 樓 Symfund 的回復:
C源文件的變量類型申明要放到函數的開始處。


嘗試中。。還有一堆代碼要修改才能再次編譯。。。

#10


這個很簡單.所以我一直強調優秀的外國書籍的重要性.

這和后綴名無關.

VS2010 采用的標准是:c90,在這個標准里.變量的聲明必須放在最前面.
  int a=33,b=126;
    int i;
bzero(buff,size);
    init_srand();
  必須寫成這樣.不用費解為什么.標准就是這么設定的.

但是C99標准.如我用的是VS2013, 其標准為C99

C99支持變量任意位置聲明.和C++一樣.

所以學習不要只學語法.語言的標准也自己要去了解.
加油!

#11


這是編譯器的語言標准的區別.不同的編譯器的語言的標准不同.你不用記死了.

#12


看10L的答案吧
想簡單點就把所有聲明放至函數開始處

#13


引用 10 樓 zhangshichuan972 的回復:
這個很簡單.所以我一直強調優秀的外國書籍的重要性.

這和后綴名無關.

VS2010 采用的標准是:c90,在這個標准里.變量的聲明必須放在最前面.
  int a=33,b=126;
    int i;
bzero(buff,size);
    init_srand();
  必須寫成這樣.不用費解為什么.標准就是這么設定的.

但是C99標准.如我用的是VS2013, 其標准為C99

C99支持變量任意位置聲明.和C++一樣.

所以學習不要只學語法.語言的標准也自己要去了解.
加油!


上述問題基本搞定,編譯的時候又遇到個問題如下:

#ifndef BUFF_SIZE
#define BUFF_SIZE (1024*1024)
#endif

void bzero(char *buff,long int size);
bool is_dir_access(char *file_path);
char *get_current_dir_name();
long int get_file_size(FILE *fp);

這段聲明居然也能給我報個錯出來!昨晚查了半天也沒找到原因
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”
1>i:\vc++\fileopr_object\windowsfunc.c(17): warning C4133: “函數”: 從“char [260]”到“LPWSTR”的類型不兼容
1>i:\vc++\fileopr_object\windowsfunc.c(21): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.c(21): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.c(21): error C2059: 語法錯誤:“類型”
1>  operation.c
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”
1>i:\vc++\fileopr_object\operation.c(113): warning C4013: “is_dir_access”未定義;假設外部返回 int
1>i:\vc++\fileopr_object\operation.c(113): error C2065: “false”: 未聲明的標識符
1>  linuxfunc.c
1>  function.c
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”
1>  FileOpr.c
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”


#14


bool類型在C語言中是沒有的啊!哈哈,又被我找到了!

#15


引用 14 樓 Symfund 的回復:
bool類型在C語言中是沒有的啊!哈哈,又被我找到了!


。。。。。偶去查查去!

#16


繼續發問。。。。編譯都完成了,也能看到運行結果了,怎么找不到可執行文件啊? 在debug的目錄下面沒有可執行程序

我用release 編譯,也沒有release文件夾。。。求解

#17


不送分?檢查下是不是忘記送分了?

#18


引用 17 樓 Symfund 的回復:
不送分?檢查下是不是忘記送分了?


還沒結貼吶。。。

#19


默認情況下,VS會在工程文件夾下生成Debug和Release目錄的,如果沒有請在VS中查看項目屬性的輸出目錄在哪里!

項目屬性->常規 

#20


引用 16 樓 liuhengxiao 的回復:
繼續發問。。。。編譯都完成了,也能看到運行結果了,怎么找不到可執行文件啊? 在debug的目錄下面沒有可執行程序

我用release 編譯,也沒有release文件夾。。。求解

關閉殺毒軟件。
查看Building.html文件的內容。
資源管理器的搜索功能會用不?

#21


引用 10 樓 zhangshichuan972 的回復:
這個很簡單.所以我一直強調優秀的外國書籍的重要性.

這和后綴名無關.

VS2010 采用的標准是:c90,在這個標准里.變量的聲明必須放在最前面.
  int a=33,b=126;
    int i;
bzero(buff,size);
    init_srand();
  必須寫成這樣.不用費解為什么.標准就是這么設定的.

但是C99標准.如我用的是VS2013, 其標准為C99

C99支持變量任意位置聲明.和C++一樣.

所以學習不要只學語法.語言的標准也自己要去了解.
加油!

別忘了使用什么標准編譯是可以配置的。

#22


引用 20 樓 zhao4zhong1 的回復:
Quote: 引用 16 樓 liuhengxiao 的回復:

繼續發問。。。。編譯都完成了,也能看到運行結果了,怎么找不到可執行文件啊? 在debug的目錄下面沒有可執行程序

我用release 編譯,也沒有release文件夾。。。求解

關閉殺毒軟件。
查看Building.html文件的內容。
資源管理器的搜索功能會用不?


全盤搜索了。。沒有找到我的可執行文件。。。

“FileOpr.exe”: 已加載“I:\VC++\FileOpr_object\Debug\FileOpr.exe”,已加載符號。
“FileOpr.exe”: 已加載“C:\Windows\SysWOW64\ntdll.dll”,Cannot find or open the PDB file
“FileOpr.exe”: 已加載“C:\Windows\SysWOW64\kernel32.dll”,Cannot find or open the PDB file
“FileOpr.exe”: 已加載“C:\Windows\SysWOW64\KernelBase.dll”,Cannot find or open the PDB file
“FileOpr.exe”: 已加載“C:\Windows\SysWOW64\msvcr100d.dll”,已加載符號。

記錄都說有這個文件了。。我也木有找到。。

#23


總不至於是你的exe里面包含自己將自己對應磁盤上的exe刪除吧。
嚴重懷疑是正運行的殺毒軟件或防火牆之類的軟件將FileOpr.exe刪掉了。

#24


“FileOpr.exe”: 已加載“I:\VC++\FileOpr_object\Debug\FileOpr.exe”,已加載符號。

在I:\VC++\FileOpr_object\Debug\文件夾下面找。

#25


.c文件,所有變量定義要放在最前面。

#26


引用 21 樓 zhao4zhong1 的回復:
Quote: 引用 10 樓 zhangshichuan972 的回復:

這個很簡單.所以我一直強調優秀的外國書籍的重要性.

這和后綴名無關.

VS2010 采用的標准是:c90,在這個標准里.變量的聲明必須放在最前面.
  int a=33,b=126;
    int i;
bzero(buff,size);
    init_srand();
  必須寫成這樣.不用費解為什么.標准就是這么設定的.

但是C99標准.如我用的是VS2013, 其標准為C99

C99支持變量任意位置聲明.和C++一樣.

所以學習不要只學語法.語言的標准也自己要去了解.
加油!

別忘了使用什么標准編譯是可以配置的。

對!.大神補充了.

#27


引用 13 樓 liuhengxiao 的回復:
Quote: 引用 10 樓 zhangshichuan972 的回復:

這個很簡單.所以我一直強調優秀的外國書籍的重要性.

這和后綴名無關.

VS2010 采用的標准是:c90,在這個標准里.變量的聲明必須放在最前面.
  int a=33,b=126;
    int i;
bzero(buff,size);
    init_srand();
  必須寫成這樣.不用費解為什么.標准就是這么設定的.

但是C99標准.如我用的是VS2013, 其標准為C99

C99支持變量任意位置聲明.和C++一樣.

所以學習不要只學語法.語言的標准也自己要去了解.
加油!


上述問題基本搞定,編譯的時候又遇到個問題如下:

#ifndef BUFF_SIZE
#define BUFF_SIZE (1024*1024)
#endif

void bzero(char *buff,long int size);
bool is_dir_access(char *file_path);
char *get_current_dir_name();
long int get_file_size(FILE *fp);

這段聲明居然也能給我報個錯出來!昨晚查了半天也沒找到原因
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”
1>i:\vc++\fileopr_object\windowsfunc.c(17): warning C4133: “函數”: 從“char [260]”到“LPWSTR”的類型不兼容
1>i:\vc++\fileopr_object\windowsfunc.c(21): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.c(21): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.c(21): error C2059: 語法錯誤:“類型”
1>  operation.c
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”
1>i:\vc++\fileopr_object\operation.c(113): warning C4013: “is_dir_access”未定義;假設外部返回 int
1>i:\vc++\fileopr_object\operation.c(113): error C2065: “false”: 未聲明的標識符
1>  linuxfunc.c
1>  function.c
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”
1>  FileOpr.c
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2061: 語法錯誤: 標識符“is_dir_access”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“;”
1>i:\vc++\fileopr_object\windowsfunc.h(12): error C2059: 語法錯誤:“類型”




#ifndef BUFF_SIZE
#define BUFF_SIZE (1024*1024)
#endif

這套語句的用法不是這樣的啊.這是用來避免頭文件重復包含的.

然后C90里面要用bool語句就是true和false必須包含頭文件bool.h

然后你的分號可能寫成中文了.

#28




#ifndef BUFF_SIZE
#define BUFF_SIZE (1024*1024)
#endif

這套語句的用法不是這樣的啊.這是用來避免頭文件重復包含的.

然后C90里面要用bool語句就是true和false必須包含頭文件bool.h

然后你的分號可能寫成中文了.

這個也可以用來防止宏的重復定義~
問題已經解決了,基本上都是按照上述給分的辦法解決


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com