看板 Soft_Job 關於我們 聯絡資訊
版上各位大大所持的意見好像都不太一樣 真是個很好的討論園地 程式技巧確實重要,但會個80%,就足以寫code了 copiler一次過很強沒錯,不過只能證明語法正確 邏輯錯誤讓你怎麼找都找不到 這時就不是程式技巧可以彌補了,這就要看你的寫法和程式架構了 其實寫過多種程式的人,大概就知道我想表達的意思了 會講domain knowledge與會不會寫程式似乎沒有很大的關連 寫程式是熟練,專業知識卻是要寫程式前就必須要會的 不然連怎麼下手都不知道。 況且通常會domain knowledge的往往職位比較高 只有像我這種寫程式的以前常常自以為上面都笨蛋@@~~ 原來我才是笨蛋 以上小小見解,接下來我來解題一下 因為有人寫信來問我答案,還有版上似乎也提供到錯誤答案了 ------------------------------------------------------- //第一題 //輸出結果為? #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char c = 130; unsigned char vc = c; printf("%d \n",c); printf("%d \n",vc); system("PAUSE"); return 0; } //輸出結果為-126,130 //因為char的取值範圍是-128至127 //首先要瞭解,127的八位二進制表示為01111111 //而-128的八位二進制並非為符號,而是11111111 //這是因為在程序中,第八個bit表示符號 //這邊表示0則為整數,表示1則為負數。 //這邊char c = 130,已超過char的取值範圍 //程序將130轉換成八位二進制,即10000010 //此時程序判訂該數為負數,當通過print函數時 //再次將該數轉換成十進制表示 //即-2^7 + 2^1 = -128+2 = -126 ============================================== //compile哪裡會錯? #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char name1[] = "Niol"; char name2[4] = "Jack"; char *name; //int i; for(int i=0;i<4;i++ ) name[i]=name1[i]; name[5]=" "; for(int i=0;i<4;i++ ) name[5+i]=name1[i]; system("PAUSE"); return 0; } //錯在for迴圈內部宣告int i=0; //這是屬於C99 Mode規範 //其中將//int i;中的註解拿調 //再將for迴圈的int i=0改為i=0即可 //因為C99 Mode不允許int在for迴圈內宣告 //但並非所有的compiler都是走C99 mode規範 //所以我認為出這種題目的疑惑蠻多的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.169.211
x000032001:所以第二題沒配置空間是? 06/20 12:11
james732:沒配置空間不會影響編譯結果是沒錯啦 XD 06/20 12:12
dickjas:為什麼一定要配置空間@@~~ 06/20 12:17
Minilogo:沒配置空間會寫到不該寫的記憶體 06/20 12:30
i386:寫到不該寫得記憶體會有問題,但題目好像是問compile哪裡會錯? 06/20 12:49
jackyu:一定要配置空間~ 06/20 12:57
※ 編輯: dickjas 來自: 140.116.158.32 (06/20 13:30)
dream1124:實在不懂為什麼大家幾乎用中文表達,但"編譯"都要打英文? 06/20 14:01
dream1124:沒人覺得這長串下來的中文段落都會摻個compiler很怪?> 06/20 14:03
dream1124:而且有些還把名詞當動詞用, 要不就是拼錯 06/20 14:03
shadow0326:用的爽就好啊 我也很喜歡說"de了一個bug" 又不是聽不懂 06/20 22:02
iman00b:第二題我沒看到是 compile 你是對的~ 06/21 12:56
iman00b:如果用 C89 連 // 都不能用~ 06/21 12:57
iman00b:指標沒配置只是會 segment fault 並不會編不過~ 06/21 12:58