相关疑难解决方法(0)

使用printf的双括号时出现分段错误

#include<stdio.h>
#define POOLNAME_FMT "Hello"

void main() {

 printf((POOLNAME_FMT "Cannot allocate %d bytes" POOLNAME_FMT "in pool not enough memory",5));

}
Run Code Online (Sandbox Code Playgroud)

当我使用双括号时,为什么会出现分段错误printf.即printf(( ));

c linux printf segmentation-fault comma-operator

4
推荐指数
2
解决办法
517
查看次数

为了打印"a"的值,内部(a + = 3,5,a)的操作数将如何处理或计算?

代码段是:

int main()
{
     int a = 1, b = 2, c = 3;
     printf("%d", a += (a += 3, 5, a));
}
Run Code Online (Sandbox Code Playgroud)

虽然它在终端中显示8作为输出.但我没有得到它背后的概念.

c undefined-behavior

4
推荐指数
2
解决办法
1265
查看次数

C函数调用后跟逗号分隔符

我正在阅读一些关于编写C程序时应该避免的错误的材料,我遇到了以下代码:

#include <stdio.h>

void foo(int param)
{
  printf("foo is called\n");
  printf("%d\n",param);
}

int main()
{
  return foo,(1);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码构建没有错误和警告(它只在-Wall被激活时显示警告)但是当我运行小程序时没有显示任何内容.由于逗号分隔符,不调用函数foo.

我的问题是为什么C标准允许这样的语法?在这种情况下编译器不应该发出错误吗?在哪种情况下,这种语法可以在一些实际用例中使用?

提前致谢,

PD:我正在使用GCC 4.8.3

编辑:

在这种情况下,编译器无法检测到这种情况并发出错误而不是警告(正如我所说,只有在启用-Wall时才会出现)

c language-design

4
推荐指数
2
解决办法
161
查看次数

C编程-while循环中的逗号运算符

编1:

#include<stdio.h>
 int main()
 {
     int i=0;
     while(i<=8,i++);
     printf("%d",i);
     return 0;
  }
Run Code Online (Sandbox Code Playgroud)

编2:

#include<stdio.h>
 int main()
{
  int i=0;
  while(i++,i<=8);
  printf("%d",i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Prog 1的输出为1,而Prog 2的输出为9。

有人可以解释一下这里发生了什么。两种代码有何不同?

c programming-languages comma while-loop

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

[x,y]符号在多维数组访问中意味着什么?

我正在研究C,遇到了下面的代码。所有printf呼叫的打印结果始终相同。

什么[x,y]意思 内存地址还是其他?

printf("%d ", array[0,0]);
printf("%d ", array[1,0]);
printf("%d ", array[2,0]);
Run Code Online (Sandbox Code Playgroud)

c arrays multidimensional-array

4
推荐指数
2
解决办法
164
查看次数

`int a [6] [(2,2)]`数组是什么意思?

阵列的第二个维度尚不清楚.这个数组的大小是48,其中int2个字节但是int a[6][4]int a[6][(2,2)]?之间的确切区别是什么?

c arrays

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

有人可以为我得到的输出清除这个概念吗?

这是在接受采访时被问到的.以下代码段的输出是什么?

#include <iostream>
using namespace std;

int main() {
    cout << (3,2,1)-(1,2,3) << endl; // in C++ too this prints -2
    printf("%d\n",(3,2,1)-(1,2,3)); // prints -2
    printf("%d\n",("%d",3,2,1)-(1,2,3)); // prints -2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通过输出我猜它(1-3)= -2.但是如何从(3,2,1)价值1中选择,同样从(1,2,3)价值3中选择?我猜对了吗?

c++ comma-operator

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

基本C编程printf棘手

int main()
{

  printf("%d %d",1,2,3,4,5);

  return 0;
} 
Run Code Online (Sandbox Code Playgroud)

输出:1,2

int main()
{
  printf("%d %d",(1,2,3,4,5));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:5,垃圾值

那么请解释为什么添加括号/括号会有所不同?

c printf

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

摸索逗号运算符

我正在尝试理解逗号运算符。该参考说:

在逗号表达式 E1, E2 中,表达式 E1 被求值,其结果被丢弃 (...),它的副作用在表达式 E2 开始求值之前完成 (...)。

我无法理解这个子句 - “...表达式 E1 被评估,它的结果被丢弃(...),它的副作用在...之前完成”。具体来说,什么是保留,什么是丢弃?

例如,在这个 SO answer的例子中:

int x = 0;
int y = some_number;
for(; x < y; ++x, --y)
{
    // Do something which uses a converging x and y
}
Run Code Online (Sandbox Code Playgroud)

当我们执行 a 时++x,什么是“结果”(即被丢弃)以及什么是“副作用”(即“已完成”,也可能是“保留”)?不++x应该丢弃的结果和值x保持不变吗?显示增量的工作示例xhere

换句话说,给定一个特定的表达式,我如何推断它是否会被评估并且它的结果会被丢弃,或者它是否是一个副作用并且它的结果可能会被计算和保留?

c++ comma-operator

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

C中","运算符的行为不清楚

在给定的代码中,我发现了以下序列,

data = POC_P_Status, TE_OK;
Run Code Online (Sandbox Code Playgroud)

我不明白这是什么意思.

数据元素是否接收第一个或第二个元素或其他内容?

更新:

我在某处读到这种行为是这样的,

如果我写那个:

if(data = POC_P_Status,TE_OK){...}

如果TE_OK为真,那么teh if子句将为真.

你什么意思?

c comma-operator

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