Tag: 括号

C读取字符串并动态接受括号

我要读一串括号来分析它。 如何读取要插入动态生成的数组中的字符串? 除了使用scanf的括号外,如何避免读取所有字符? [] {}() 谢谢。 编辑:我必须从键盘读取一系列括号,但我不知道长度。 所以我要创建一个动态生成的数组(这是一个要求),只包含括号的空格。 当我正在阅读时,我想只接受括号并避免使用所有其他字符,这是否可以与正则表达式的scanf一起使用?

对于结构变量,为什么初始化器{21,19,3.6}与{{21,19},3.6}相同,但反之亦然?

在下面的例子中,我用两个结构test1和test2来说明这个。第一个有两个元素 – 一个大小为2的整数数组,和一个浮点元素。第二个结构有3个元素,2个整数和1个浮点数。 我为test1初始化了两个结构变量s1和s2 : s1={{23,52},2.5},s2={21,19,3.6}; 两者都工作正常,即使对于s2我已经取出括起数组元素的大括号。它没有警告工作正常,输出正确。但是当我为test2初始化2个变量时如下: v1={{23,52},2.5},v2={21,19,3.6}; 当我尝试打印出v1的值时输出不正确,这些是我在编译时得到的警告: warning: braces around scalar initializer| warning: (near initialization for ‘v1.list1’)| warning: excess elements in scalar initializer| warning: (near initialization for ‘v1.list1’)| ||=== Build finished: 0 errors, 4 warnings ===| 基于此前提,请清除以下产生的疑问: 问题:如果使用v1={{23,52},2.5}而不是v1={23,52,2.5}会使编译器混淆前两个数字是结构的不同整数元素还是整数数组元素的一部分结构,那么为什么不使用s2={21,19,3.6}而不是s2={{21,19},3.6}混淆编译器认为结构varialbe s2有3个元素(2个整数元素和1个浮动),而不是2个元素(一个大小为2的整数数组和一个浮点数)?我特别想了解的是为什么关于v1的初始化的第一个案例是错误的。 #include struct test1{ int list[2]; float rate; }s1={{23,52},2.5},s2={21,19,3.6}; //Works fine struct test2{ int list1; […]

C中的括号是否可以更改按位运算的操作数的结果类型?

我通过静态分析工具提供了以下代码: u1 = (u1 ^ u2); // OK u1 = (u1 ^ u2) & u3; // NOT OK u1 = (u1 ^ u2) & 10; // NOT OK u1 = (u1 ^ u2) & 10U; // NOT OK u1 = (unsigned char)(u1 ^ u2) & 10U; // OK u1 = (unsigned char)(u1 ^ u2) & […]

在C / Objective-C中将返回值放在括号中的意图是什么?

我遇到了一些代码,它们围绕括号中方法/函数的返回值。 那是做什么的? 我看到的代码拍了一张图片,调整了大小然后又返回了。 – (UIImage *)resizeImage:(UIImage *)image { // // some fascinating, but irrelevant, resizing code here // return (image); }

在C中,为什么在这个例子中有围绕(int)的括号?

decimal d = 2; int i = (int) d; 我已经多次看到这些括号围绕数据类型。 为什么不使用int i = int d; ?

我们可以删除C宏定义中参数周围的括号吗?

从http://c-faq.com/style/strcmp.html ,我学到了以下便利宏: #define Streq(s1, s2) (strcmp((s1), (s2)) == 0) 我想知道为什么在这个宏中使用了这么多括号。 每个括号是用于某个目的还是使用冗余括号的宏,这些括号没有用处? 我们可以删除s1和s2周围的括号并制作这样的宏吗? #define MyStreq(s1, s2) (strcmp(s1, s2) == 0) MyStreq宏对我来说似乎和Streq一样Streq 。 #include #include #define Streq(s1, s2) (strcmp((s1), (s2)) == 0) #define MyStreq(s1, s2) (strcmp(s1, s2) == 0) int main() { printf(“%d %d\n”, Streq(“foo”, “foo”), MyStreq(“foo”, “foo”)); printf(“%d %d\n”, Streq(“fox”, “foo”), MyStreq(“fox”, “foo”)); printf(“%d %d\n”, Streq(“foo”, […]

何时可以省略宏中参数的括号?

通常我常常觉得围绕宏定义中的参数的一些括号是多余的。 把一切都括起来太不方便了。 如果我可以保证参数不需要括号,我可以省略括号吗? 或者强烈建议将它们括起来? 我写的时候想出了这个问题: #define SWAP_REAL(a, b, temp) do{double temp = a; a = b; b= temp;}while(0) 我认为如果参数在宏中显示为l值,则可以省略括号,因为这意味着参数出现时没有其他操作。 我的理由是: 赋值符号的关联优先级仅高于逗号。 您不能将编译器混淆为认为您的参数是带有逗号的表达式。 例如, SWAP(a, b, b)将不会被成功解释为 do{double temp = a, b; a, b = b; b= temp;}while(0) 哪个可以通过编译。 我对吗? 任何人都可以给我一个反例吗? 在以下示例中, #define ADD(a, b) (a += (b)) 我认为这个论点不需要用括号括起来。 在这种特殊情况下,既不需要参数b ,对吗? @JaredPar: #include #define ADD(a, b) […]

在确定数组的大小时,括号是否有所作为?

以下程序在gcc 4.8.2上两次打印相同的数字: #include int main() { char a[13]; printf(“sizeof a is %zu\n”, sizeof a ); printf(“sizeof(a) is %zu\n”, sizeof(a)); } 根据这个redditpost ,gcc在这方面不符合标准,因为当数组到指针衰减没有发生时,括号表达式不在exception列表中。 这家伙是对的吗? 这是相关的标准报价: 除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化字符数组数组的字符串文字,或者是用于初始化元素类型与wchar_t兼容的数组的宽字符串文字,具有“数组类型”类型的左值将转换为具有“指向类型的指针”类型的表达式,该类型指向数组对象的初始成员且不是左值。 为了清楚起见,他认为(a)应该触发数组到指针的衰减,因为上面的列表中没有括号括起来( sizeof运算符,一元&运算符,字符串文字作为初始值)。

C宏和括号中的参数使用

例 #define Echo(a) a #define Echo(a) (a) 我意识到这里可能没有显着差异,但为什么你会想要在宏体内包含a括号内的a ? 它是如何改变它的?