Tag: 语法

什么是FAR PASCAL?

我想知道为什么在某些源代码中存在像FAR和PASCAL这样的宏。 他们的意思和做法是什么? 谢谢

简单的C语法问题

我在我正在考虑的C课程的旧考试中遇到了以下代码: struct QuestionSet{ char q1:1; char q2:1; char q3:1; } 我不知道语法“char q1:1”的意思,我无法在“C语言编程语言”中找到它,这是课本。 谁有人解释一下?

是不是有语法错误? 应该是printf(“一个”,两个和“”%s。\ n“,”三个“); 是有效的代码?

看看这段代码: #include #define _ONE “one” #define _TWO_AND “, two and ” int main() { const char THREE[6] = “three” ; printf(_ONE _TWO_AND “%s.\n”, THREE ); return 0; } printf有效: printf(“one” “, two and ” “%s.\n”, “three” ); 输出是: 一,二,三。 编译此代码后, gcc既没有错误也没有警告消息。 gcc编译器是否应该以这种方式工作,还是一个bug?

从类型’char *’分配类型’char ‘时不兼容的类型

我正在尝试将char *字段分配给char *字段,但是会收到此错误: incompatible types when assigning to type ‘char[128]’ from type ‘char *’ 我怎样才能解决这个问题? 为什么会这样? AddressItem_Callback_ContextType *context = (AddressItem_Callback_ContextType *)malloc(sizeof(AddressItem_Callback_ContextType)); //check if icons need to be downloaded if (pEntity->cBigIcon[0] != 0){ if (res_get(RES_BITMAP,RES_SKIN, pEntity->cBigIcon) == NULL){ context->Icon = pEntity->cBigIcon; context->iID = pEntity->iID; res_download(RES_DOWNLOAD_IMAGE, pEntity->cBigIcon, NULL, “”,TRUE, 1, addressItem_icon_download_callback, context ); } } 声明: typedef […]

为什么这个C ++代码会编译? 它有什么作用?

我不小心删除了方法名称时遇到了这个问题。 代码来自 bool bRet = MethodName(pData, pOutFilename); 至 bool bRet = (pData, pOutFilename); 但仍然编译? 这段代码有什么作用? 这是什么意思? 它似乎返回true,总是这样(即使pData为null)? 欢迎任何想法!

C中的int * ptr和int * ptr有什么区别?

我在C上相当新,我不知道以下两个变量声明之间的区别: int* ptr; int *ptr; 我认为在声明中int* ptr; , ptr的值不能改变,而可以为声明改变, int *ptr; 我不确定是不是这样。 请帮助我理解这两个声明背后的概念。

为什么C不具有二进制文字?

我经常希望我能在c中做这样的事情: val1 &= 0b00001111; //clear high nibble val2 |= 0b01000000; //set bit 7 val3 &= ~0b00010000; //clear bit 5 拥有这种语法似乎是C的一个非常有用的补充,没有我能想到的缺点,对于低级语言而言,这似乎是很自然的事情。 编辑:我看到了其他一些很好的选择,但是当有更复杂的面具时,它们都会崩溃。 例如,如果reg是控制微控制器上I / O引脚的寄存器,并且我想将引脚2,3和7设置为高电平,同时我可以写入reg = 0x46; 但是我不得不花10秒时间思考它(而且每次我在没有看一两天后阅读这些代码时我可能不得不再花10秒钟)或者我可以写reg = (1 << 1) | (1 << 2) | (1 << 6); reg = (1 << 1) | (1 << 2) | (1 << 6); 但我个人认为这不仅仅是写’reg = 0b01000110;’。 […]

c / c ++中unsigned long / long / int之间有什么区别?

似乎所有这些都占用了4个字节的空间, 那有什么区别?

为什么在变量之前将常量置于比较中?

我在一些代码中注意到了一段时间的以下语法: if( NULL == var){ //… } 要么 if( 0 == var){ //… } 和类似的事情。 有人可以解释为什么写这个的人选择这种符号而不是常见的var == 0方式)? 这是一种风格问题,还是以某种方式影响性能?

迭代for循环中的所有无符号整数

假设我想迭代for循环中的所有整数。 为了便于讨论,假设我为每个整数调用一些未知函数f(unsigned x) : for (unsigned i = 0; i < UINT_MAX; i++) { f(i); } 当然,上面的代码无法遍历所有整数,因为它错过了一个:UINT_MAX。 将条件更改为i <= UINT_MAX只会导致无限循环,因为这是一个重言式。 你可以使用do-while循环来完成它,但是你会失去for语法的所有细节。 我可以吃蛋糕( for循环)并吃掉它(迭代所有整数)吗?