小编Gan*_*ian的帖子

C逗号运算符

为什么在逗号运算符(例如下面的示例)中指定的表达式不被视为常量表达式?

例如,

int a = (10,20) ;
Run Code Online (Sandbox Code Playgroud)

当在全局范围内给出时产生错误"初始化器不是常量",尽管由逗号运算符分隔的两个表达式都是常量(常量表达式).为什么整个表达式不被视为常量表达式?为了澄清我已经阅读了','运算符在C中做了什么?C逗号运算符的使用.他们没有涉及逗号运算符的这个方面.

c expression scope comma-operator

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

C拼图 - 玩类型

请检查以下程序.

#include <stdio.h>

struct st
{
 int a ;
}

fn ()
{
 struct st obj ;
 obj.a = 10 ;

 return obj ;
}

int main()
{
 struct st obj = fn() ;

 printf ("%d", obj.a) ;
}
Run Code Online (Sandbox Code Playgroud)

以下是问题

  1. 该计划的输出是什么?
  2. 哪里 ';' 终止'struct st'的声明?

    根据ISO IEC 9899-1999规范,声明应以';'结尾.

        declaration-specifiers init-declarator-listopt ;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果'struct st'的声明仅代表函数'fn'的返回类型,那么它对其他函数(main)的可见性如何?

c puzzle types scope declaration

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

连接器和架构

为什么我们有不同架构的连接器?链接器的服务是解析地址.那么它如何与目标架构的指令相关?

embedded linker

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

使用GCC进行循环版本控制

我正在与GCC进行自动矢量化.由于客户要求,我无法使用内在函数或属性.(我无法获得用户输入以支持矢量化)

如果可以矢量化的数组的对齐信息未知,则GCC调用"循环版本控制"的传递.在树上进行循环矢量化时,将执行循环版本控制.当一个循环被识别为可矢量化,并且对数据对齐或数据依赖性的约束阻碍它(因为它们不能在编译时确定),那么将生成两个版本的循环.这些是循环的矢量化和非矢量化版本,以及对齐或依赖性的运行时检查,以控制执行哪个版本.

我的问题是我们如何加强协调?如果我找到了一个可矢量化的循环,我不应该因为缺少对齐信息而生成两个版本的循环.

例如.请考虑以下代码

short a[15]; short b[15]; short c[15];
int i;

void foo()
{
    for (i=0; i<15; i++)
    {
      a[i] = b[i] ;
    }
}
Run Code Online (Sandbox Code Playgroud)

树转储(选项:-fdump-tree-optimized -ftree-vectorize)

<SNIP>
     vector short int * vect_pa.49;
     vector short int * vect_pb.42;
     vector short int * vect_pa.35;
     vector short int * vect_pb.30;

    bb 2>:
     vect_pb.30 = (vector short int *) &b;
     vect_pa.35 = (vector short int *) &a;
     if (((signed char) vect_pa.35 | (signed char) vect_pb.30) & 3 == 0)    ;; <== (A) …
Run Code Online (Sandbox Code Playgroud)

gcc simd alignment vectorization

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

奇怪的C程序

请检查以下代码段

struct st
{
    struct st
    {
        int a ;
        int b ;
    } st;

    int a1 ;
} ;

struct st obj ;
struct st obj1 ;

int main()
{
    return obj.a1 + obj1.b ;
}
Run Code Online (Sandbox Code Playgroud)

Microsoft的编译器Visual Studio 6.0成功编译该程序.我对'struct st'的使用感到困惑.obj和obj1的大小是多少?

c visual-studio

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