Tag: 范围

C原型范围

我了解到了 在函数原型(不是函数定义的一部分)中的参数声明列表中声明标识符的类型说明符,标识符具有函数原型作用域,它终止于函数声明符的末尾。 请参阅下面提到的C程序。 void fn (struct st {int a;} a, struct st b) ; struct st obj ; 编译器会立即发出错误,因为’obj’大小未知(或)struct st不是’type’。 那就对了! 结构’struct st’的声明在原型声明中结束。 我相信原型有这个限制因为我们也可以在原型声明中使用一些变量名。 这些名称可能与同一范围内的变量(与函数原型的变量)冲突。 如下。 void fn (int a) ; int a ; 因此,为了允许上述声明,原型的范围是有限的。 (如果我错了,请纠正我) 但是,对于原型声明,参数变量名称没有用。 那么,为什么它是“狭隘的范围”? 拥有参数变量名称有什么意义? 什么是语言设计者(或)规范对此的想法?

C中的const变量的数组大小

我发现了一个有趣的事实,我不明白它是如何运作的。 以下代码完美无缺。 #include int main(){ const int size = 10; int sampleArray[size]; typedef char String [size]; return 0; } 然后,我尝试只使用具有全局范围的常量变量,并且它仍然很好。 #include const int size = 10; int main(){ int sampleArray[size]; typedef char String [size]; return 0; } 但是,如果我将数组的范围也改为全局,我得到以下结果: 错误:在文件范围内修改了’sampleArray’ #include const int size = 10; int sampleArray[size]; typedef char String [size]; int main(){ return 0; […]

关于范围的变量的最佳声明

我问这个问题主要是关于C编程,但欢迎任何语言的见解。 说到C,我知道它只允许变量声明在代码块的最开始发生。 我一直认为应该在函数的最开始声明要在函数内使用的所有变量。 但是在很多情况下我会有一个仅在循环(或类似的块)中使用的变量。 一个例子是一些返回值的临时变量: while ( whatever ) { int ret; ret = getSomeValue(); } 或者某些州可能需要举行的地方: while ( whatever ) { static int count=0; count++; } 我想知道它是否被认为是不合适的,或者,如果在控制流程块中声明变量有任何负面影响,例如if-else,for循环,while循环等。 变量是否应始终以最严格的范围声明? 静态声明怎么样? 编辑 :好的,我可能应该说我知道C99在你声明变量的地方更自由,但是从我看到的很多C代码中,它们仍然通常被声明在顶部。 另外,我使用的VS2K8仍然抱怨声明。 另外,看到我已经有2票可以关闭这个thead,我会明确表示我更关注性能和编译器方面,而不是任何风格。

我的处理器上C中的int,short和其他数据类型的范围?

我正在读一本旧的C书,据此而言 int范围值从-32768到+32767。 如果我的机器可以容纳比该限制更大的int,我如何找到特定于我的机器的这些数据类型(short,int,long,double,float)的范围? 那有什么方法吗?

信号处理程序不会看到全局变量

这是问题:这个程序应该从stdin接收输入并计算插入的字节数; SIGUSR1信号将停止主程序并将在文件标准错误上打印当我发送SIGUSR1时已经复制了多少字节。 这就是我老师要我这样做的方式:在一种终端类型中 cat /dev/zero | ./cpinout | cat >/dev/null 而从第二个终端发送信号 kill -USR1 xxxx 其中xxxx是cpinout的pid。 我更新了我以前的代码: /* cpinout.c */ #include #include #include #include #include #define BUF_SIZE 1024 volatile sig_atomic_t countbyte = 0; volatile sig_atomic_t sigcount = 0; /* my_handler: gestore di signal */ static void sighandler(int signum) { if(sigcount != 0) fprintf(stderr, “Interrupted after %d […]

块范围链接C标准

以下标识符没有链接:声明为对象或函数以外的任何标识符; 声明为函数参数的标识符; 在没有存储类说明符extern的情况下声明的对象的块作用域标识符 。 { static int a; //no linkage } 对于在该标识符的先前声明可见的范围内使用存储类说明符extern声明的标识符,如果先前声明指定内部或外部链接,则后面声明中的标识符的链接与链接相同在先前声明中指明。 如果没有先前声明可见,或者先前声明未指定链接 , 则标识符具有外部链接 。 { static int a; //no linkage extern int a; //a should get external linkage, no? } GCC错误:没有链接的以下声明的extern声明 有人可以解释我为什么会出现这个错误? 谢谢

在K&R 2-1中解释此代码

我正在尝试确定各种浮点类型的范围。 当我读到这段代码时: #include main() { float fl, fltest, last; double dbl, dbltest, dblast; fl = 0.0; fltest = 0.0; while (fl == 0.0) { last = fltest; fltest = fltest + 1111e28; fl = (fl + fltest) – fltest; } printf(“Maximum range of float variable: %e\n”, last); dbl = 0.0; dbltest = 0.0; while (dbl […]

C – 限制结构范围

我在.c文件中有这个结构: struct entry { int position; int length; struct entry *node; }; 现在,我如何将此结构布局的范围限制为主机文件,以便在另一个文件中为新结构布局使用相同名称时,我不会收到“重新定义”错误? 我尝试在struct之前使用static ,但似乎没用(我也没有意义)。 顺便说一句, 这个问题对我来说似乎没有用,因为我在链接文件中复制stuct条目时会遇到“重新定义”错误(使用MinGW)。 —编辑— 对于那些想要了解更多的人: 这里和这里 。

static – 仅用于限制范围?

C中的static关键字是否仅用于将变量的范围限制为单个文件? 我需要知道我是否理解这一点。 请假设以下3个文件, 在file1.c int a; file2.c中 int b; file3.c中 static int c; 现在,如果3个文件一起编译,那么变量“a”和“b”应该具有全局范围,并且可以从3个文件中的任何一个访问。 但是,变量“c”是静态的,只能从file3.c访问,对吗? static在C中有任何其他用途吗? (除了限制变量的范围,如上所示?)

为什么函数可以通过malloc返回数组设置,但不能通过“int cat = {0,0,0};”返回一个设置。

为什么我可以通过malloc从函数返回数组设置: int *dog = (int*)malloc(n * sizeof(int)); 但不是由数组设置 int cat[3] = {0,0,0}; 返回“cat []”数组并显示警告。 感谢你的帮助