Tag: 警告

c警告:在常量表达式中使用const变量在C中是非标准的

尝试将数组初始化为常量时,我​​收到此警告。 #2170-D在常量表达式中使用const变量在C中是非标准的 #file.h typedef struct { // LED Blink Pattern ….. } LEDSeq void addError(LEDSeq); void runLEDErrors(); …. #file.c const uint8_t MAXERRORS = 4; LEDSeq errors[MAXERRORS]; uint8_t errorsLength = 0; …. 本质上,它是一些代码,它将循环遍历在运行时添加的LED错误序列。 我必须使用固定大小的数组,因为realloc在我的环境中不可用。 代码都有效。 我只是想知道为什么我会收到这个错误。

警告:未知转义序列:’\ 040′

我正在用C编写一个简单的应用程序,我想在BSD许可下发布。 应用程序的一部分负责向用户打印有关该程序的信息。 但是,我在打印许可证文本时遇到问题。 这是一个例子: #include #include void show_license(void) { const char *license = “\n\ Copyright (c) 2012 \n\ All rights reserved.\n\ \”Redistribution and use in source and binary forms, with or without\n\ modification, are permitted provided that the following conditions are\n\ met:\n\ \n\ * Redistributions of source code must retain the above copyright\n\ notice, this […]

‘noreturn’function确实会回归

当我编译下面的C程序时,我收到这个警告: ‘noreturn’ function does return 。 这是function: void hello(void){ int i; i=1; } 为什么会这样? 对此函数的所有调用都是hello(); 编辑:完整的错误输出: home.c: In function ‘hello’: hhme.c:838:7: error: variable ‘i’ set but not used [-Werror=unused-but-set-variable] home.c:840:1: error: ‘noreturn’ function does return [-Werror] cc1: all warnings being treated as errors make: *** [home.o] Error 1

默认情况下忽略null字符

我正在尝试用数组实现堆栈! 每次我执行程序运行正常但我收到警告,因为默认情况下忽略空字符 这个警告意味着什么?我做错了什么? 我的代码是: #include #include # define MAX 10 int top=-1; int arr[MAX]; void push(int item) { if(top==MAX-1) { printf(“OOps stack overflow:\n”); exit(1); } top=top+1; arr[top]=item; }//warning int popStack() { if(top==0) { printf(“Stack already empty:\n”); exit(1); } int x=arr[top]; top=top-1; return x; } void display() { int i; for(i=top;i>=0;i–) { printf(“%d “,arr[i]); } return; […]

导致Gtk中断断言

我必须调试一个严重依赖于Gtk的程序。 问题在于,由于某些原因,在使用GtkWindow对象时已经开始出现许多运行时警告。 问题是,即使Gtk抱怨严重错误,它也不会中止这些错误。 我没有代码库的更改历史记录,所以我唯一的选择似乎是涉及所有似乎可疑的gtk调用并查看问题所在。 但是,如果我可以以某种方式导致Gtk中止此错误,我可以使用gdb运行它并尝试获取回溯并找到错误的确切位置。 知道如何做到这一点? GLib-GObject-WARNING **: invalid uninstantiatable type `’ in cast to `GObject’ GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)’ failed GLib-GObject-WARNING **: invalid uninstantiatable type `’ in cast to `GObject’ GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)’ failed GLib-GObject-WARNING **: invalid uninstantiatable type `’ in cast to `GObject’ GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT […]

条件表达式中的常量值

在关于无限循环的编码风格问题中 ,有些人提到他们更喜欢for(;;)样式,因为while(true)样式在MSVC上给出关于条件表达式是常量的警告消息。 这让我感到非常惊讶,因为在条件表达式中使用常量值是避免#ifdef地狱的有用方法。 例如,您可以在标题中: #ifdef CONFIG_FOO extern int foo_enabled; #else #define foo_enabled 0 #endif 代码可以简单地使用条件并信任编译器在未定义CONFIG_FOO时删除死代码: if (foo_enabled) { … } 每次使用foo_enabled时都不必测试CONFIG_FOO: #ifdef CONFIG_FOO if (foo_enabled) { … } #endif 这种设计模式一直在Linux内核中使用(例如,include / linux / cpumask.h在禁用SMP时将几个宏定义为1或0,在启用SMP时定义为函数调用)。 MSVC警告的原因是什么? 另外,有没有更好的方法来避免#ifdef hell而不必禁用该警告? 或者这是一个过于宽泛的警告,一般不应该启用?

“从不兼容的指针类型分配”警告

我正在编写一个函数来解析带有纹理和动画数据的文件,并将其加载到我声明的一些全局结构中。 我在特定行上收到编译器警告“从不兼容的指针类型分配”。 这是很多代码,所以我只想在这里发布重要的部分。 首先,我的动画例程有一个struct数据类型,如下所示: typedef struct { unsigned int frames; GLuint *tex; float *time; struct animation *next; } animation; 如您所见,结构中的最后一个变量是指向动画完成时默认为另一个动画的指针。 这是加载函数的声明: void LoadTexturePalette(GLuint **texture, animation **anim, const char *filename) 该函数将信息加载到动画数组中,因此是双指针。 在加载每个动画的最后,从文件中提取一个整数,指示“下一个”指针将指向哪个动画(加载的动画)。 fread(tmp, 1, 4, file); (*anim)[i].next = &((*anim)[*tmp]); 在最后一行,我得到编译器警告。 我还没有使用那个变量,所以我不知道警告是否是一个问题,但我觉得我的语法或我的方法在设置该变量时可能是不正确的。

无法摆脱“此十进制常量仅在ISO C90中无符号”警告

我在我的哈希表实现上使用FNV哈希作为哈希算法,但我在这行的问题标题中收到警告: unsigned hash = 2166136261; 我不明白为什么会这样,因为当我这样做时: printf(“%u\n”, UINT_MAX); printf(“2166136261\n”); 我明白了: 4294967295 2166136261 这似乎是在我的机器的限制下…… 为什么我会收到警告,有什么方法可以摆脱它?

变量被遮蔽时收到警告

我通常想避免这样的代码: #include int main(int argc, char *argv[]){ int n = 3; for (int n = 1; n <= 10; n++){ printf("%d\n", n); } printf("%d\n", n); } 我怎样才能找到变量的这种用法? 这意味着,在同一函数中,“更本地”变量与更全局变量具有相同的名称? C标准:C 99

C中的空结构

我有一个没有成员的结构(目前),我想知道是否有可能抑制我得到的警告: warning: struct has no members 是否可以添加成员并保持结构的sizeof为零? 还有其他方法吗?