iT邦幫忙

0

簡單的c語言程式,不知怎麼debug

c
  • 分享至 

  • xImage

各好版友好,本人一直以來都在研究python,而現在公司要我研究一個用C來寫的東西,有些無法take direction

#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

#define GET_COUNTER() {
if ((p = strtok(NULL, " \t")) == NULL)
continue;
counter = atoll(p);
}

int main()
{
printf("ddd");
}

上面的程式run完後出現以下error:

test.c:8:17: error: expected identifier or '(' before 'if'
8 | if ((p = strtok(NULL, " \t")) == NULL)
| ^~
test.c:10:9: warning: data definition has no type or storage class
10 | counter = atoll(p);
| ^~~~~~~
test.c:10:9: warning: type defaults to 'int' in declaration of 'counter' [-Wimplicit-int]
test.c:10:25: error: 'p' undeclared here (not in a function)
10 | counter = atoll(p);
| ^
test.c:11:1: error: expected identifier or '(' before '}' token
11 | }
| ^
[Finished in 235ms]

請問有沒有熱心的版友知道如何將這段小程式修改至可以運行? 謝謝

看更多先前的討論...收起先前的討論...
mathewkl iT邦高手 1 級 ‧ 2022-07-26 15:56:02 檢舉
error不是很好心地寫出哪裡有問題要你修改了嗎?
就這樣看好像沒有補上 ) 和空了datatype
你是不是把
#define GET_COUNTER() {
註解掉了,所以好像跑多一個 }
淺水員 iT邦大師 6 級 ‧ 2022-07-26 16:07:04 檢舉
貼程式碼可以參考這張圖
https://ithelp.ithome.com.tw/upload/images/20220506/20112943CaY46NCTvh.png
ffaanngg iT邦新手 5 級 ‧ 2022-07-26 21:48:27 檢舉
但括號在我看來沒有少啊
define 不能分行 只是為何要用 define 寫
define 的處理是 "替代" , 把 一大句話 濃縮 成一句話,編譯時候會展開來
可能誤把 c語言的 #define想成python的def了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-07-26 17:36:17

如何將這段小程式修改至可以運行?

改好了
https://ithelp.ithome.com.tw/upload/images/20220726/20001787aPoJgZlbFI.png

#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

/*
#define GET_COUNTER() {
    if ((p = strtok(NULL, " \t")) == NULL)
        continue;
    counter = atoll(p);
}
*/

int main() {
    printf("ddd");
    return 0;
}

/images/emoticon/emoticon01.gif

ffaanngg iT邦新手 5 級 ‧ 2022-07-26 21:49:42 檢舉

不要鬧了啦,我當然因為define的那一段程式才卡住

ffaanngg iT邦新手 5 級 ‧ 2022-07-26 22:00:13 檢舉

啊,我知道問題在哪了,把define中的東西通通縮成一行就ok了

0
jeffery777
iT邦見習生 ‧ 2022-07-27 17:04:01
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

#define GET_COUNTER() { \
    if ((p = strtok(NULL, " \t")) == NULL) \
        continue; \
    counter = atoll(p); \
}

int main()
{
    printf("ddd");
}

主程式沒有呼叫函數GET_COUNTER。
#define不是函數,你錯把它想成python的def了,兩者不一樣。

三個函數
返回類型為int的main()
你指定返回類型 GET_COUNTER()
你指定返回類型 stroke(參數一, 參數二)

你需要在main()裡呼叫GET_COUNTER()。
另外在int main及GET_COUNTER()之外,
撰寫stroke()函數的內容,畢竟你在GET_COUNTER裡呼叫strok()了。

我要發表回答

立即登入回答