簡體   English   中英

邏輯運算符作為c中的條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM