我正在查看cuda c编程指南指南中的代码段http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#atomic-functions
在他们给出的片段中有一个声明,它让我陷入了一个循环,我在解释它时遇到了一些麻烦......
unsigned long long int old = *address_as_ull, assumed;
我在SE上经历了几个类似的问题,我想我已经得到了它但我仍然不确定......我对所指示的行的解释是它相当于:
unsigned long long int old = *address_as_ull;
unsigned long long int assumed;
假设我是对的,我真的不明白为什么,或者发生了什么。我知道我可以做点什么
int a,b,c;
声明3种类型的整数,但是当我在一行中混合赋值和声明时会发生什么?
答案 0 :(得分:3)
你是对的:
unsigned long long int old = *address_as_ull, assumed;
与此相同:
unsigned long long int old = *address_as_ull;
unsigned long long int assumed;
声明一个或多个变量时,可以选择指定初始值设定项。
来自C standard的第6.7节:
6声明说明符由一系列序列组成 指示链接,存储持续时间和部分的说明符 声明符所表示的实体类型。的的 init-declarator-list是逗号分隔的序列 声明者,每个都可能有其他类型 信息或初始化程序,或两者兼有。声明者 包含声明的标识符(如果有)。
答案 1 :(得分:0)
也许有人会提出一个技术上更准确的答案,但这里有一个可能有帮助的轶事。
int a,b,c;
被解释为"为一个名为'''"
old = *address_as_ull*
被解释为"为3个整数分配足够的字节,称为' a',' b'和' c'& #34;
你可以将认为作为函数调用的equals运算符返回它所作用的相同引用。所以"返回" old
的值为int fact(int n);
int
a = 1, // an integer
*p = new int(2), // a pointer initialized with the value 2
(*fp)(int) = fact; // a function pointer to the function fact()
。
作为旁注,你也可以混合和匹配指针,只要"结果"是一个整数。
conf:HConf
除了这种轶事之外,我所能说的就是这样,因为有人认为它是这样的,那就是标准"。能够以这种方式声明具有相同类型的许多变量很方便。也许它可以帮助编译器进行优化(真的可以说)。但当然没有理由不这样。