• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如图所示

yangwei199494 2016-12-09 浏览量:805

出现这个问题。。。。。很纠结,,,哪里有错

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 已解決,加油

    • 发布于 2016-12-09
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:10
MOP 回复了 999 :我測了一下C51編譯器的確跟其他編譯器(x86,ARM,AVR)很大不同,竟然沒指定型別也不會有任何警告錯誤,難怪我們思考方向不一樣,這樣對學生不是很好的示例,不過回到問題,它有include一堆標頭檔,有可能只是少include定義uchar的標頭檔,也可能uchar定義錯誤也會有那問題 回复

  • #define HZSTART;

    虽然这样用有隐患,不建议预定义中加分号,但这个预定义本身不会报错。

    如果用错,它就会报错在产生错误的地方。

    而LZ报错的地方根本没有用HZSTART;

    @MOP 模拟的情况和LZ的不一样。


    一开始我以为xdata关键字的顺序问题,

    其实应该是uchar,把它当成了一个普通符号了。

    要么用#define或者typedef 在上边定义一下uchar就可以了。

    或者定义在你单片机的头文件中。


    • 发布于2016-12-10
    • 举报
    • 评论 6
    • 1
    • 0
999 回复了 999 :是#define HZSTART 0; 打错了,下边那个复制的,囧。为何不能修改回复。。。 回复
MOP 回复了 999 :那樣會出現identifier "uchar" is undefined,另外#define照我上面的解釋雖不會報錯,但是純定義數值非字串本來就不該出現(case by case),所以當使用它時候就會有問題 回复
999 回复了 MOP :囧rz,如果没有define或typedef uchar,LZ那句那么写会是把uchar当成了变量,所以不会是identifier "uchar" is undefined。 回复
MOP 回复了 999 :所以一開始回題目時候,它沒用到HZSTART,也沒其他宣告問題,錯誤也沒貼出第幾行,就只是哪行使用macBbuffer前面那行沒加分號而已,就從貼出程式碼部分,分號出現很不自然,只能這樣回答^^ 回复
MOP 回复了 999 :當成變數名稱,是只有extern xdata uchar; 但這case顯然不是喔^^... 回复
999 回复了 MOP :抱歉,你这句话我没翻译明白。 回复

  • #define  HZSTART 0 ; 这里多了一个分号  
    • 发布于2016-12-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 谁说define不能有分号

    如果我没记错,xdata 要写在 uchar的后边。

    • 发布于2016-12-09
    • 举报
    • 评论 2
    • 0
    • 0
MOP 回复了 999 :可參考實驗結果噢...謝謝^^" 回复
999 回复了 MOP :嗯,你模拟error和LZ是不一样的情况。 回复

  • 我們來做一個小實驗

    #define BUFFER_SIZE 10;
    
    在主函式或者其他函式中使用它,最簡單宣告陣列或者打印...
    char buf[BUFFER_SIZE]={};
    printf("%d\n",BUFFER_SIZE);
    以下是ARM-MDK結果

    error:  #17: expected a "]"
    error:  #29: expected an expression
    error:  #18: expected a ")"
    error:  #29: expected an expression
    以下是x64-GCC 5.4.0結果

    error: expected ‘]’ before ‘;’ token
    note: in expansion of macro ‘BUFFER_SIZE’
    error: expected ‘)’ before ‘;’ token
    note: in expansion of macro ‘BUFFER_SIZE’
    所以C51可預測結果也是一樣的,可自己實驗玩看看噢

    • 发布于2016-12-10
    • 举报
    • 评论 2
    • 0
    • 0
MOP 回复了 MOP :char buf[BUFFER_SIZE]={""}; //改為較嚴謹 回复
MOP 回复了 MOP :define實際就是定義的值直接代入變成==> char buf[10;]={""} ,所以編譯器報錯應該要是[10]才對^^ 回复

  • 确实是多了个分号。不是#define不能有分号,而是define的这个东西相当于一条或多条语句,当作参数时如果有分号就错了。
    • 发布于2016-12-10
    • 举报
    • 评论 0
    • 0
    • 0

  • #define  HZSTART 0 ; 这里多了一个分号   作宏定义 不能用分号
    • 发布于2016-12-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 我看错了,不是分号造成的,999说的没错
    • 发布于2016-12-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 哪个头文件中函数声明或变量定义的时候少了 ;或是其他符号比如 括号等
    • 发布于2016-12-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如图所示