相关疑难解决方法(0)

什么','在语法中意味着什么?

我正在寻找一些例子,我不知道这意味着什么:

if(FileExistsA("File.ext"), false)
{
     ....
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

c++ if-statement

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

当逗号分隔的for循环的条件部分中有多个表达式时会发生什么?

我这里有一个无限循环,但为什么呢?

int end = 5;
for(int i = 0; i < end, printf("at condition i=%d\n",i); ++i) 
{
    printf("inside i=%d\n",i);
}
Run Code Online (Sandbox Code Playgroud)

c syntax loops comma-operator

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

模拟 GCC 语句表达式

我被迫使用 IAR EW430 编译器 v7.12 用于嵌入式项目,它只正式支持 c99。

我希望能够通过任何方式以通用方式模拟 GCC 的语句表达式,而不是编写一堆专用的内联函数。

有没有办法实现这一目标?(也许使用 MACRO-wizardry?或者模拟 Lambda,或者一些允许这样做的隐藏编译器开关?)显然不是改变编译器。

具体来说,复合表达式的最后一条语句的结果应该同时携带其类型和值,而不是作为宏参数传入的那些。

我已经搜索了几个月,但我能得到的最接近的是令人印象深刻的图书馆,但这似乎是一个非常多的东西。

c lambda closures c99 c-preprocessor

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

是否可以在c中传递两个参数?

我已经写了一个C程序,在其中声明了一个函数reverse(int i)。当我编译并运行该程序时,尽管传递了两个这样的参数,它仍然可以正常运行reverse((i++, i))。为什么这不会引起语法错误?reverse期待一个论点。

  #include <stdio.h>
    void reverse(int i);
    int main()
    { 
            reverse(1); 

    }
    void reverse(int i)
    {
            if (i > 5)
                    return ;
            printf("%d ", i); 
            return reverse((i++, i));
    }
Run Code Online (Sandbox Code Playgroud)

c operator-precedence

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

在 C 中将数组分配给 int

我用C编写了以下代码

int main(){
    int a = {1, 2, 3};
}
Run Code Online (Sandbox Code Playgroud)

看起来分配的变量(在本例中为 a)总是采用第一个数组元素的值。现在我想知道其他数组元素是否被丢弃,或者在a之后写入内存,从而导致缓冲区溢出。

c arrays scalar initialization braced-init-list

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

为什么以下代码不会产生编译错误?

我正在使用VS2005编译器,我期待以下代码给出编译错误.

int a=1, b= 2, c=3;
a = (b,c);
Run Code Online (Sandbox Code Playgroud)

后赋值的值是3.根据我的理解,它应该给出编译错误.

我很高兴知道这背后是否有任何正当理由.

c++ compiler-errors comma-operator

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

while循环输出多个条件

main()
{
    int i=0,j=0;
    while(i<5,j<10)
    {
        i++;
        j++;
    }
    printf("%d,%d,",i,j);
}
Run Code Online (Sandbox Code Playgroud)

输出: 10,10

int main(){
    int x=2,y=2;
    while(x<=5,y<=3)
         printf("%d %d ",++x, ++y);
    return 0;        
}
Run Code Online (Sandbox Code Playgroud)

输出: 3 3 4 4

在第一个代码中,输出如何产生10,10?任何人都可以解释,但第二个代码的输出是3344,是否都运行在不同的逻辑上?

c loops while-loop conditional-statements

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

**如何在二维数组中工作?

int main(void) {
    unsigned int x[4][3] = {(1,2,3),(4,5,6),(7,8,9),(17,11,12)};
    printf("%d, %u, %u, %u \n",**x, **(x+1), **(x+2), **(x+3));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是3,12,0,0.不应该是1,4,7,17​​,因为x存储数组的第一个元素的地址?

当我试图打印时

printf("%u, %u \n", x, &x[0][0] );
Run Code Online (Sandbox Code Playgroud)

它显示了相同的地址2108666688,2108666688

但是当我尝试使用打印数组时

for(int i = 0; i<4; ++i)
{
    for(int j = 0; j<3 ; ++j)
    {
        printf("%d ",x[i][j]);
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

我看到输出为

3 6 9 
12 0 0 
0 0 0 
0 0 0 
Run Code Online (Sandbox Code Playgroud)

那么,到底发生了什么?为什么没有将数字正确分配给数组?

c pointers multidimensional-array

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

res + =(f(i),f(i + 1)),f(i + 2)是什么; 评价到?

在代码中:

#include <iostream>
int f(int x)
{
    static int cnt = 0;
    return ++cnt * x;
}
int main ()
{
    int res = 0;
    for (int i = 0; i < 6; ++i) {
        res += (f(i), f(i + 1)), f(i + 2);
//        f(i);
//        res += f(i + 1);
//        f(i + 2);
        std::cout << res << std::endl;
    }
    std::cout << res;
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这条线是如何工作的:

res += (f(i), f(i + 1)), f(i + 2);
Run Code Online (Sandbox Code Playgroud)

我明白它等同于评论部分,但为什么呢?

c++

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

在 C 中使用逗号而不是分号进行表达式拆分

请给我一个想法,何时可以使用逗号作为分隔符,何时只能使用分号:

typedef struct k{int a,b;}*K;
main() {
  K z=(K)malloc(2*sizeof(int));
  z->a=1, // <- may be ; or , at the eol
  // This seems not like a multi-variables definition of same type vars, so why ',' is good?
  z->b=2;
  free(z);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

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