Tag: 范围

C指定大于数据类型范围的值

在C int类型中,可以具有以下+ ve范围的值2,147,483,647 来源 : https : //msdn.microsoft.com/en-IN/library/s3f49ktz.aspx 我想知道如果我指定大于int的值可以容纳,如何截断值或者确切地存储什么,如果我这样做会发生什么 int var = 2147483648;

如何访问在一个函数中创建的数据结构,在另一个函数中,而不返回或传入它?

如果可以,我只是通过在main函数中初始化结构的副本并将其传递给另一个函数来解决这个问题,但我不允许更改此项目的函数头。 既然我已经得到了这个,我也确定有一个同样好的解决方案,它将帮助我学习如何使用动态内存分配来使函数的动作独立于该函数的范围。 我的结构: typedef struct AmNet { // this struct can be changed as needed int size; User ** users; // group of users in the net User *front; // the first user User *back; // the last user } *AmNet; 要创建的function是: void create_net(){ // this line cannot be changed } 在另一个文件的main函数中,简单地用: create_net(); 然后,例如 – […]

如何避免来自C中#define的名称冲突? (或C ++)

这应该是一个非常基本的问题,我可以通过更改一些名称来避免这种情况,但我想也许我在这里缺少一些东西。 我为这个问题编写了一个最简单的代码。 conv.h : 1 struct convpar_ { 2 int K; 3 } convpar_; test.c : 1 #include 2 #include “conv.h” 3 4 #define K 7 5 6 typedef struct convpar_ convpar; 7 8 void func1(convpar cp) 9 { 10 printf(“cp.K = %d\n”, cp.K); 11 } 12 13 main() 14 { 15 convpar cp = […]

在C中,当其他宏引发名称冲突时,如何使用其他宏定义宏

这是后面的一个后续问题(请到最后阅读我的问题): 如何避免来自C中#define的名称冲突? (或C ++)假设我使用#define定义ROW和COL。 然后我使用ROW和COL定义ARRSIZE。 我声明一个静态数组,如float myarray[ARRSIZE]; 。 当我修改ROW和COL时,静态数组大小会相应地改变。 但在我的特殊情况下,名称ROW和COL名称与我在同一文件中使用的结构类型的成员名称冲突。 有人告诉我使用const变量而不是使用’#define’来避免混淆。 我喜欢我将代码修改为beloow(这是一个例子)。 const int ROW = 100; const int COL = 200; const int ARRSIZE = ROW*COL; float myarray[ARRSIZE]; 对此进行处理给了我 error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ARRSIZE’ 在我定义ARRSIZE的行。 当然我可以使用int ARRSIZE = ROW*COL; 在函数内部,使用malloc在函数内动态分配数组。 但是,如果我只想改变ROW和COL并且不想使用malloc怎么办? 当使用#define时,没有问题(名称冲突除外)。 #define ROW 100 #define COL 200 #define […]

在C中的数组中强制执行范围

快速,可能是超级基本问题。 如果我声明一个10个双精度数组并提示用户输入他们想要的索引数量(显然在1到10之间),我将如何强制执行该范围? 我假设使用if / else语句,但是有更强的方法来强制执行该范围吗? 再说一次,可能很简单。 我是新手,所以还不熟悉C ++或JavaScript。

在迭代期间保留在循环体中声明的变量吗?

考虑C中的循环,它在循环体中声明一个字符数组。 在每次迭代时,都会修改数组的字符,直到到达结尾。 最后,打印变量。 描述将扩展到下一个代码: #include int main(void) { int i = 0; for (;;) {/* same as: while(1) { */ char x[5]; x[i] = ‘0’ + i; if (++i == 4) { x[i] = ‘\0’; /* terminate string with null byte */ printf(“%s\n”, x); break; } } return 0; 许多人可能期望0123作为输出。 但由于某些原因,GCC 4.7在启用优化( -O1和更高版本)进行编译时不会这样做。 它将随机数据放在字符数组的第一个字节中,这将成为: | […]

#define在整个库中的范围?

说我有一个常数: #define PI 3.14 假设我有一个包含多个头文件和源文件的静态库。 如果我在头文件中声明它,它的范围是否适用于所有源文件? 或者源文件是否需要包含带有PI声明的标头?

全局变量是否比C中的局部变量快?

我对此有几点想法。 第一个是分配全局变量可能更快,因为它们在程序首次生成时只分配一次,而每次调用函数时都必须分配局部变量。 我的第二个想法是,由于局部变量在堆栈上,它们是通过基址指针寄存器访问的,因此每次访问局部变量时,必须递减存储在基址指针中的值。 全局变量可以通过数据段中的静态地址直接访问。 我的想法准确吗?

在另一个结构中声明/定义的结构范围

从嵌套结构中读取,我意识到在另一个结构中声明的结构的范围与包含结构相同。 我认为它只包含在包含结构中。 我从这个链接得到了这个印象。 它说有4个名称空间,其中一个是结构的成员。 我“逻辑地”推断内部结构仅限于外部结构。 任何人都可以提供标准的参考,以确定范围规则在这种情况下的确切工作方式吗? 以及允许内部结构在包含结构外可见的任何理由? 如果它是可见的,为什么不在外面声明结构… 问题2 :对于术语,当我提供结构的成员时,比方说 struct out{ int a, b; char c, d; struct in{ int a, b; }e; }; 我是否为struct out和struct in提供了定义 ; 或者我是否为两者提供声明 ? 我理解函数和原始数据类型的区别,但对于struct来说并不是很清楚。 编辑 :我在SO上找到的有用链接: C和C ++中的嵌套结构 。 但它没有提供任何理由。 现在我怀疑是否有一个C …

在同一个函数中,UB是否可以通过间接访问 – 一个不在范围内的局部变量?

在第二个闭合支撑之后, b只能通过间接通过a 。 int main() { int *a; { int b = 42; a = &b; } printf(“%d”, *a); // UB? return 0; } 由于b不再是范围,这是UB吗? 我知道从已经返回的函数中取消引用指向非静态局部变量的指针是UB,但在这种情况下,所有内容都在同一个函数中。 这是C ++中的UB,但我不确定C.