我正在編寫C語言中的非破壞性轉換例程,我剛剛意識到(至少在Visual C++中)函數是按相反順序解析的。C函數解析順序
所以:
main()
{
char* psString[] = { "Hello", "World", "World2", "World3" };
printf("%s - %s - %s - %s\n",
H2A_N(psString[0]),
H2A_N(psString[1]),
H2A_N(psString[2]),
H2A_0(psString[3]));
return 1;
};
我的代碼是不可重入並且僅運行在一個單獨的線程,所以我打算用字符的靜態數組存儲結果。
我的計劃是有一個函數H2A_0,它將輸出寫入緩衝區的起始處,並留下下一個地址以便隨後調用H2A_N。我認識到這種方法有一些缺點,但我必須將這個轉換例程應用於很多現有的代碼,所以越簡單越好(我不想混亂釋放內存)。
我的問題是:
- 這是不是C標準的一部分,以解決功能以相反的順序(當它們被作爲參數傳遞給其他函數)。
- 有沒有更好的方法來做到這一點?
嘗試將字符串與'的strdup複製()'。 'main()'的標準返回值應該是'0'。 –
c.f. http://stackoverflow.com/questions/621542/compilers-and-argument-order-of-evaluation-in-c – imallett
@ ott--:我不確定''strdup()'在Windows上是否可用。至少,它不是C標準的一部分(這是一個POSIX函數,就像'fork()')。 –