Tag: 变量声明

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

考虑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和更高版本)进行编译时不会这样做。 它将随机数据放在字符数组的第一个字节中,这将成为: | […]

C11是否允许函数中任何位置的变量声明?

C11标准(注意我不是指C ++ 11)是否允许您在函数中的任何位置声明变量? 以下代码在ANSI C(C89,C90)中无效: int main() { printf(“Hello world!”); int a = 5; /* Error: all variables should be declared at the beginning of the function. */ return 0; } 它是C11中的有效源代码吗?

如何在C中创建字符串类型变量

题 如何在C中声明字符串变量? 背景 在我学习c的基础知识的过程中,我试图将我最古老的python程序Bob之一移植到C.在程序中,脚本会询问用户有关他或她自己的信息,然后吐出响应。 几乎所有这些变量都使用raw_input作为信息 – 变量是字符串。 但是,我发现无法声明C变量。 码 到目前为止,我已经尝试将变量声明为char和int.类型int. 这是代码,在您闲暇时切换类型。 int main(int argc, const char * argv[]) { int name; printf(“What is your name?”); scanf(“%s”,&name); printf(“Your name is %s”, name ); return 0; } 错误信息 当我运行此代码时, Xcode返回一些奇怪的东西。 突出了这一部分的全球性。 0x7fff96d2b4f0: pcmpeqb(%rdi), %xmm0 最后, 雅虎答案说我不得不使用一种叫做character array东西。 它发布于5年前,所以我认为有更好的方法。 编辑 我正在按照C编程的教程进行操作。

使用goto跳过变量声明?

我正在阅读C编程 – KNKing 的现代方法来学习C编程语言,并且注意到goto语句不能跳过变长数组声明。 但现在问题是:为什么goto跳转允许跳过​​固定长度数组声明和普通声明? 更确切地说,根据C99标准,这些例子的行为是什么? 当我测试这些案例时,似乎声明实际上没有被跳过,但这是正确的吗? 声明可能已跳过的变量是否可以安全使用? 1。 goto later; int a = 4; later: printf(“%d”, a); 2。 goto later; int a; later: a = 4; printf(“%d”, a); 3。 goto later; int a[4]; a[0] = 1; later: a[1] = 2; for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d\n", a[i]);

C长型是多久?

我知道标题看起来很愚蠢,但我认为这值得一提。 以此声明(或定义,可能)为例: _Thread_local long volatile static int _Atomic const long unsigned x = 10; 我曾经认为long long是一个类型,但如果它是一个类型名称,那么如何插入这么多限定符呢? 所以我用这个问题咨询了N1570,只是为了更加困惑。 它提到了一些术语,如“ 类型说明符 ”和“ 类型限定符 ”,我在“类型说明符”中找不到多long long ,但在C中不long long的原始类型? 有这么多书告诉我了! 澄清不重复: 是的,我看到一个现有的问题涉及long int long ,但这个问题与限定符有关,并且在C中。

C有像C ++这样的一个定义规则吗?

最近,我发现有些情况绝对会违反C ++的ODR,但会在C编译器中编译好。 例如,这个奇怪的场景(和我一起): 来源1 int var_global=-3; 来源2 #include #include unsigned int var_global; int main() { printf(“%d \n”,var_global); getch(); return 0; } 我的打印结果是-3 (即使在Source 2中 var_global是unsigned )并且没有关于var_global 重新定义的var_global 。 我知道C与C ++有不同的规则,但我认为它不是那么不同。 我有谷歌并阅读了很多结果,但没有像 C ++ 这样的官方结果。 所以问题是: C有像C ++这样的一个定义规则吗? 和: 什么叫官方? 我需要它与C ++规则进行比较,这样我才能更深入地理解这两种语言。 p / s:我使用Visual Studio 2010编译上面的代码。

如何告诉Visual Studio / Microsoft的C编译器在第一个语句之后允许变量声明?

我有编译GNUARM编译器的代码,但Visual Studio 2010发出错误。 该问题涉及在C语言文件中的第一个语句之后声明变量: main.c中 #include #include int main(void) { int i = 6; i = i + 1; printf(“Value of i is: %d\n”, i); int j = i * 10; // <– This is what Visual Studio 2010 complains about. printf("Value of j is: %d\n", j); return EXIT_SUCCESS; } 以下代码编译时没有错误: #include #include int main(void) […]

while循环C / C ++中的变量声明

据我说,while循环应该是无限的,但它只运行三次 main() { int i=3; while(i–) { int i=100; i–; printf(“%d..”,i); } } 它输出99..99..99 但据我说,它应该运行无限次,因为每次控制进入循环它得到值100.所以它永远不会达到零。 只是为了实验我替换了int i=100; i=100; 在while循环中,现在它运行无限次.WHY ???

变量声明导致分段错误

我不明白程序中出现分段错误的原因。 代码可在此处获得 在第29行,我声明了一个PclImage变量,使用typedef定义,类似于struct数组。 PclImage类型的定义如下(来自src / libMyKinect.h文件): typedef struct { int valid; float x; float y; float z; unsigned char blue; unsigned char green; unsigned char red; } Point3d; typedef Point3d PclImage[480][640]; 该程序运行良好,但是当我声明第二个PclImage ,我一启动程序就会出现分段错误。 例如,如果在第一个文件的第30行,我添加了PclImage bgPcl; 程序立即崩溃。 谁能帮我?

C错误:int之前的预期表达式

当我尝试以下代码时,我得到了提到的错误。 if(a==1) int b =10; 但以下在语法上是正确的 if(a==1) { int b = 10; } 为什么是这样?