Tag: 语法

用自己初始化变量:为什么它不是编译时错误?

我有点困惑,我设法不小心写了相当于这个的代码 int a=a; // there is not a declared before this line 并且编译器愉快地编译了它 – gcc和clang,它们非常符合标准且具有良好的诊断function。 (使用-Wall ,gcc 4.8警告未初始化的变量; clang不警告)。 我认为分配的RHS将在LHS之前进行评估,因此导致在RHS上未定义。 我可以对这个语法合法的原因进行一些简单的澄清吗?

解除引用的指针构造的地址

在unqlite c库中,我找到了以下代码: pObj = jx9VmReserveMemObj(&(*pVm),&nIdx); 其中pVm是: typedef struct jx9_vm jx9_vm; jx9_vm *pVm 和被调用的函数声明为: jx9_value * jx9VmReserveMemObj(jx9_vm *, sxu32 *); 什么构造&(*pVm)用于调用而不仅仅是pVm ? &(*pVm)相当于pVm吗?

Xcode在程序中提供了3个处理Stray’\ 342’的语法错误

我正在使用Xcode中的Objective-C中的一个简单项目,我得到一些关于以下代码行的错误/错误: if(celsius < −273.15) { NSLog(@"It is impossible to convert temperatures less than −273.15 degrees Celsius, because this is absolute zero, the coldest possible temperature."); } 它实际上只是关于第一行,但我想提供一些背景信息。 有什么建议? 我在这里查了一下,但其他人的错误并没有像我这样简单的代码,虽然看起来他们有一个常见的问题,就是对某些标点符号进行错误的编码,也许? 在我的if语句中,这只是一些语法。 更新: 它看起来好像还显示了2个其他的杂散错误: 流浪’\’210’流浪’\’222′

c中的##是什么?

我看过这个片段: #define kthread_create(threadfn, data, namefmt, arg…) \ kthread_create_on_node(threadfn, data, -1, namefmt, ##arg) ##代表什么? ##出现在宏外时是什么意思?

打印unsigned long long int值类型返回奇怪的结果

我在使用printf函数打印unsigned long long int类型的值时遇到问题 我不知道出了什么问题。 我在Windows 7 Professional 64位上使用Dev-Cpp 4.9.9.2和Visual Studio 2010 Professional(我知道它不是C编译器,但无论如何,想要尝试)。 为了显示,我使用了%llu修饰符(根据你如何printf一个unsigned long long int(unsigned long long int的格式说明符)? )但我也试过I64d没有效果…… 首先,我只想打印unsigned long long int最小值和最大值(使用limits.h ULONG_MAX ) printf(“unsigned long long int: \n%llu to %llu \n\n”, 0, ULONG_MAX); 返回: unsigned long long int:18446744069414584320 to 1580552164021 (Dev-Cpp) unsigned long long int:18446744069414584320 to 0 (Visual Studio) 然后我尝试使用printf打印两个零 printf(“unsigned […]

C指针语法

这两行代码有什么区别? int *ptr = &x; 和 void* q = &x; int* p = q; 我对C和指针的概念很新 – 主要是用Java教过 – 所以有点困惑。 提前致谢。

C类型转换和添加优先级

下一个表达式的优先级是什么? item = (char*)heap + offset; 是(char*)(heap + offset)还是((char*)heap) + offset ?

为什么表达式和语句之间存在差异

可能重复: 表达与陈述 表达是什么意思? 评估某事的东西会返回一个值吗? 它与声明有何不同? 语句是否可以包含表达式,反之亦然?

C中的指针语法:为什么*仅适用于第一个变量?

C中的以下声明: int* a, b; 将声明a类型为int*和b作为int类型。 我很清楚这个陷阱,但我想知道的是它为什么会这样运作。 为什么不像大多数人直觉所期望的那样将b声明为int* ? 换句话说,为什么*适用于变量名,而不是类型? 当然你可以用这种方式写它,以便与它的实际工作方式更加一致: int *a, b; 但是,我和我所说过的所有人都认为a是“指向int”的类型 ,而不是a是指向某些数据的指针 ,而该数据的类型是“int” 。 这对C的设计者来说简直是一个糟糕的决定还是有一些很好的理由为什么它会被解析? 我确定之前已经回答了这个问题,但我似乎无法使用搜索找到它。

为什么将括号括在逗号分隔值列表周围会改变赋值?

请考虑以下代码, int i; i = 1,2,3,4,5; printf(“First time i = %d\n”,i); i = (1,2,3,4,5); printf(“Second time i = %d\n”,i); 输出: 第一次i = 1 第二次i = 5 为什么括号使逗号运算符取最后一个值而没有括号则取第一个值? 提前致谢。