看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《gundan (鋼彈)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : vc++ : 問題(Question): : char*傳入function的問題 : 餵入的資料(Input): : char* : 程式碼(Code):(請善用置底文網頁, 記得排版) : char* func(char* buffer) : { : printf( "%x" , buffer); ←問題在這行 : char result[40]; : return result; : } : 補充說明(Supplement): : 程式裡只要用到buffer就會出現語法錯誤 : 錯誤在下面那行 錯誤訊息就是在type前必須有 " ; " : 請問一下這是什麼問題??? : 謝謝 其實 vc 裡面, 用 .c 有蠻多要注意的, 原因嗎? 大概是 vc 用 .c 是用 c 語言 compiler, 非 c++ compiler, 也不支援 c99, 補一下我常遇到的, 有些可能有專有名詞, 但我沒記那些專有名詞( 歡迎補充 ) 1. 變數必須一次宣告完 就如你程式裡面的 result 一樣,在 result 前不能做任何指令之動作, 即使是放在 for loop 做初值宣告也不行 /* .cpp pass, .c fail */ for(int i=0; i!=5; ++i) puts("hello, world!!"); 不過可以進行宣告, 並以呼叫函式方式給予初值 /* .cpp pass, .c pass */ int x=func1(); int *iptr = (int*)malloc(sizeof(int)*10); int others; 甚至原本程式碼可以有一點小技巧可以避開 /* .cpp pass, .c pass */ char *func(char *buf) { printf("%x",buf); { char* ret = (char*)malloc(sizeof(char)*10); return ret; } } 這技巧早期程設師也會拿來做 register 規劃 ,因 register 有限,不能用太多. 但是有一說,現今部份 compiler 在 release mode 時, 會把 register 全拿掉, 這部份優化由 compiler 自己做, 會保留 register 關鍵字只是為相容而已。 2. 強制轉型部份 以上述 malloc 為例, char *ret = malloc(sizeof(char) * 10); 這在 .c 是可行的, 但在 .cpp 是不可行的 3. 結構宣告與使用部份 struct s{ int x; int y; }; 宣告上時, .c 必須連關鍵字 struct 一起輸入, .cpp 卻不用 /* .cpp pass, .c fail */ s obj; 到後來我都這麼搞 typedef struct tag_s{ int x; int y; }s; /* .cpp pass, .c pass */ s obj; 4. 設立函式引數初值部份 /* .cpp pass, .c fail */ void func(int x=10) { int i; for(i=0; i!=x; ++i) puts("hello, world!!"); } 在 .c 裡面不允許你那麼做, 但在 .cpp 裡面可以。 5. 注意數學函式之多載問題 數學函式使用上必須注意在 .c / .cpp 多載問題 , /* .cpp fail, .c pass */ double x = pow(2, 3); 部份函式, 該用浮點數就別省 /* .cpp pass, .c pass */ double x= pow(2.0, 3.0); /* 當然不會是這個例子 */ --- 以上一點經驗, 常見的那些, 有些可能還舉出, 供參考, 也歡迎補充。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.78.41 ※ 編輯: tropical72 來自: 180.177.78.41 (09/08 13:07)
diabloevagto:好人推! 09/08 13:08
diabloevagto:話說,pow那邊我在cpp內用整數也可以耶,不用刻意用 09/08 13:08
diabloevagto:浮點數 09/08 13:09
tropical72:應是有什麼誤會,error C2668: 'pow' : 模稜兩可的呼叫~ 09/08 13:11
tropical72:用 .cpp, 專案清掉重 build, 錯誤可能就浮出來了. 09/08 13:12
james732:推好人! 09/08 13:21
angleevil:~"~超哥真的是... 09/08 13:45
gundan:超清楚,感恩! 09/08 15:00
littleshan: http://david.tribble.com/text/cdiffs.htm 09/08 15:11
tropical72:littleshan 提供的真是好物... vc .c 不完全是便是 XD 09/08 15:14
cutecpu:推 09/08 17:34
VictorTom:推:) 09/08 23:04
xatier:用心推! 09/09 01:02
realtemper:push 09/09 17:53