[英]logical operators as conditionals in c
我想做以下事情:
r = recv(socket, buffer, bufsize, 0) && return r;
這是行不通的,因為return -r;
不是表達。 然而,
r = recv(socket, buffer, bufsize, 0) && printf("r=%d\n", r);
似乎有效。 現在,除了語法上的簡潔之外,沒有太多收獲,但是我仍然很好奇是否有辦法實現&& return r;
的功能&& return r;
實際編譯?
編輯:如果不清楚,則在&&
之后的表達式僅當第一個非零時才應執行。
當且僅當第一個非零時,才應執行&&之后的表達式。
這是您的問題: 表達式未執行 ,它們被求值 。 語句被執行。
表達式在評估過程中可能會產生副作用 ,但是它們始終會評估為某個值。 如您所知, return
是一個語句而不是一個表達式 。
因此,總之,沒有,您無法做的事情。
printf()
語法printf()
是一個expression
(函數調用),而return __
是一個jump-statement
。
運算符&&
需要2個類型為expression
操作數,這就是為什么它拒絕您的代碼的原因。
查看ISO 9899
中的Appendix A
對的,這是可能的。
r = recv(socket, buffer, bufsize, 0);
if (r != 0)
{
return r;
}
如果您正在尋找比這更復雜的東西,那么您做錯了。 優秀的程序員力求簡單,而糟糕的程序員力求混淆。
這是一個壞主意,但是只要您想要,就可以開始
r = recv(socket, buffer, bufsize, 0) && (({return r;}),0);
這將根據需要工作。
我可以解釋您需要的情況。 我再說一遍,這是一個壞主意。
除了一個壞主意之外,該解決方案還使用了一個名為-Statement-expressions的gcc擴展名。 因此,此答案無法在編譯器之間移植。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.