相关疑难解决方法(0)

这是什么语法?

i = 1, 2, 3, 4, 5;
Run Code Online (Sandbox Code Playgroud)

这实际上是指定1i.

*****我想知道这种类型的赋值在某个地方是否真的有用吗?*****

你知道这种语法的一些应用吗?

c syntax variable-assignment

3
推荐指数
5
解决办法
332
查看次数

为什么三元运算符不支持块?

为什么三元运算符没有块?换句话说,为什么以下代码不起作用并报告{}大括号错误?

int main()
{
    int i = 1;
    (i==1)?{printf("Hello\n")}:{printf("World\n")};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑

也许这个问题被误解了.原因是:为什么不支持块?为什么只有单一表达?

为什么不允许这样做?

int main()
{
    int i = 1;
    (i==1)?{printf("Hello\n");printf("World\n");}:{printf("Bye\n");printf("World\n");};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一个原因可能是三元通常用于左侧的条件赋值,而块将没有这样的返回,或者它会与块内的多个语句混淆.

c ternary-operator language-lawyer

3
推荐指数
2
解决办法
2119
查看次数

在C中,如果我使用()来初始化双维数组而不是{},究竟会发生什么?

初始化数组时a[][]:

int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};
Run Code Online (Sandbox Code Playgroud)

然后显示数组元素.

为什么我得到:

11 89 0 0 0 
0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

如果你在这里使用花括号而不是第一个括号会发生什么?

c

2
推荐指数
1
解决办法
134
查看次数

奇怪的条件语法

我遇到了for一个非常不寻常的条件下面的循环

int main( int argc, const char* argv[] ) {
    for ( int i = 0 ; i < ( 10, 20 ) ; i++ ) {
        cout << i << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

此源代码已成功编译.它i使用0到19之间的值执行循环(10表达式(10, 20)似乎对迭代次数没有影响).

我的问题:
这个条件语法是什么?为什么不导致编译错误?

编辑:
更大的图片:这个问题始于一个错误,原始条件应该是i < std::min( <expr A>, <expr B> )由于某种原因我省略了std::min.

所以,我想知道为什么代码首先编译.现在我看到这个bug是一种合法的(虽然没用)语法.

谢谢!

c++ syntax for-loop conditional-statements

2
推荐指数
1
解决办法
155
查看次数

扫描声明后的逗号?

不是我的代码,而是来自这里.在read_data()函数中有一个scanf,后面还有我之前看不到的东西.它有什么作用?是STL吗?

scanf("%d %d\n", &a, &b), G[a].pb(b), deg[b]++;
Run Code Online (Sandbox Code Playgroud)

c++ scanf comma-operator

1
推荐指数
1
解决办法
68
查看次数

这里虚空的目的是什么?

我一直在查看journalctl代码并遇到了以下代码块.

如果在测试条件时存在非零结果,这似乎是退出一系列条件测试的简便方法.很聪明.

但我不确定void演员的目的.它是否抑制一些编译器输出?即使使用-Wall和,g ++也不关心-pedantic -pedantic-errors.

m1 = strjoina("_SYSTEMD_UNIT=", unit);
m2 = strjoina("COREDUMP_UNIT=", unit);
m3 = strjoina("UNIT=", unit);
m4 = strjoina("OBJECT_SYSTEMD_UNIT=", unit);

(void)(
  /* Look for messages from the service itself */
  (r = sd_journal_add_match(j, m1, 0)) ||

  /* Look for coredumps of the service */
  (r = sd_journal_add_disjunction(j)) ||
  (r = sd_journal_add_match(j, "MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1", 0)) ||
  (r = sd_journal_add_match(j, "_UID=0", 0)) ||
  (r = sd_journal_add_match(j, m2, 0)) ||

  /* Look for messages from PID 1 …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
67
查看次数

C++,这句话是什么意思?

我看到这句话: (20, 30, 50)

当我cout << (20, 30, 50);打印50.

当我把它改写(a, b, c)- ,,a 可还是-它总是打印.有人为我解释一下吗?请.bcchar*intc

c++

-1
推荐指数
1
解决办法
90
查看次数

为什么if语句不返回C++中的值

...比如Algol68或Smalltalk?这将解决的问题是初始化一个const变量,其值在if-then-else语句中确定.

是的,我知道,C++没有这样定义.但是阻碍什么呢?将if-expression重新定义为if语句会破坏向后兼容性吗?或者难以消除所需的语言文档更改的歧义?

例:

auto const x = if (some condition)
{   
    expression 1;
    expression 2;
    expression 3;

}
else
{
    expression 4;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下我不能这样做

auto const x = (some condition) ? expression1 : expression2;
Run Code Online (Sandbox Code Playgroud)

c++

-4
推荐指数
1
解决办法
123
查看次数

逗号(,)运算符抑制C中括号的优先级

我刚开始读C

情况:

x =(y = 3,(z = ++ y + 2)+ 5)

首先评估y = 3然后评估(z = ++ y + 2)

我的问题 :

首先应该评估(z = ++ y + 2),因为逗号(,)的优先级远小于括号

我的思维方式:

  1. 由于优先顺序,我们选择外括号

  2. 然后我们需要评估括号

  3. 在这个(括号)下,我再次开始应用优先规则

  4. 所以我先拿内支架进行评估

PS:

这不是重复

我已经通过这些链接但仍然无法理解

C语言中逗号运算符的行为

C逗号运算符

逗号运算符是做什么的?

https://docs.microsoft.com/en-us/cpp/cpp/comma-operator

C逗号运算符的使用

https://en.wikipedia.org/wiki/Comma_o​​perator

c

-4
推荐指数
1
解决办法
160
查看次数