Re: [問題] char* 的問題
※ 引述《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)
推
09/08 13:08, , 1F
09/08 13:08, 1F
→
09/08 13:08, , 2F
09/08 13:08, 2F
→
09/08 13:09, , 3F
09/08 13:09, 3F
→
09/08 13:11, , 4F
09/08 13:11, 4F
→
09/08 13:12, , 5F
09/08 13:12, 5F
推
09/08 13:21, , 6F
09/08 13:21, 6F
→
09/08 13:45, , 7F
09/08 13:45, 7F
推
09/08 15:00, , 8F
09/08 15:00, 8F
推
09/08 15:11, , 9F
09/08 15:11, 9F
→
09/08 15:14, , 10F
09/08 15:14, 10F
推
09/08 17:34, , 11F
09/08 17:34, 11F
推
09/08 23:04, , 12F
09/08 23:04, 12F
推
09/09 01:02, , 13F
09/09 01:02, 13F
推
09/09 17:53, , 14F
09/09 17:53, 14F
討論串 (同標題文章)