Tag: 大括号

函数声明和大括号之间的C语句

可能重复: 这个C语法的用处是什么? 定义中函数标题后的C变量声明 奇怪的C语法是什么? 我正在尝试理解一些代码,它具有以下内容: int getr(fget) FILE *fget; { /* More declarations and statements here */ return (1); } 以上和之间有什么区别: int getr(fget) { FILE *fget; /* More declarations and statements here */ return (1); } 如果是这样,他们有什么不同?

对于结构变量,为什么初始化器{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中起作用?

我正忙着在业余时间学习一些C. 我有一些Java经验,因此我习惯用大括号来限制ie变量的范围。 但我有点困惑,因为看起来好像Brian W. Kernighan / Dennis M. Ritchie的书“The C Programming Language”并没有使用很多花括号,我认为使用它们是正常的(来自Java的角度)。 即代码为的书中的1.6: while((c = getchar())) != EOF) if (c >= ‘0’ && c <= '9') ++ndigit[c-'0']; else if() /*and so forth…*/ ++nwhite; else ++nother; 从Java的角度来看,我习惯于只运行第一个语句,因为缺少大括号,但缩进表明一切都会运行(if,else if else) 所以我要问的是:这里会运行什么,为什么会运行? if,else if和else都在while循环的范围内吗? 是否要引用任何约定,我可以阅读以试图更好地理解它? 提前致谢。

实际使用C中的额外括号

我知道{}用于分隔函数,类和条件分支等实体,但是它们在这里有什么其他用途? #import int main(void) { {{{ printf(“main\n”); }}} return 0; } 编辑: 我发现它主要用于信息隐藏以及嵌套函数 。 从下面的答案看,它们似乎可以在调试期间用作标记,并在发布中删除,但这不应该得到认可。