我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.
问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL.
是否还有另一种可能性来确定卡住的过程究竟在哪里?
是否可以scanf定义数据类型?
#include <stdio.h>
enum numberByMonth {jan=1,feb,mar,apr,may,jun,jul,aug,sep,okt,nov,dec};
main(){
printf("\n");
printf("Get Number By Month (type first 3 letters): ");
enum numberByMonth stringy;
scanf("%u",stringy);
printf("Your month number is: %u",stringy);
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我扫描哪种数据类型?我把它设置为%u因为gcc告诉我它是无符号整数.
我用C编写了一个库,现在将用于嵌入式处理器板.我需要减少内存占用量,因此将一些函数的返回类型从int更改为char(仅用于标记错误).
更改返回类型但不更改返回的变量不会产生警告.有没有办法在gcc中设置它,因为我想确保我已经捕获了所有实例.
char processSomething (SomeType *something)
{
int result = 0;
...
do stuff
...
return result; /* no warning */
}
Run Code Online (Sandbox Code Playgroud)
谢谢
6月19日:我添加了-Wconversion,它突出了一些有趣的东西.这有两个问题.我的一个函数我采用两个字符的十六进制字符串并使用转换为十进制
char十进制;
decimal = hexstring [0] - '0' << 4 + hexstring [1] - '0'; // for 0 to 9
Run Code Online (Sandbox Code Playgroud)
它抱怨从int转换为char,而我可以收集的是' - ','+'和'<<'运算符似乎都隐式转换为int.这是正确的还是我解释错误的警告.或者有更好的方法来做到这一点?
另外,当将strtol用于int时(抱怨'long int'到'int')但是我可以保证即使是short int也不会超过这个值,对于类型转换是否安全?因为它将截断长的额外(并希望零字节)?或者这取决于字节顺序?
谢谢
考虑以下(简化)代码:
enum eTestMode
{
TM_BASIC = 1, // 1 << 0
TM_ADV_1 = 1 << 1,
TM_ADV_2 = 1 << 2
};
...
int m_iTestMode; // a "bit field"
bool isSet( eTestMode tsm )
{
return ( (m_iTestMode & tsm) == tsm );
}
void setTestMode( eTestMode tsm )
{
m_iTestMode |= tsm;
}
Run Code Online (Sandbox Code Playgroud)
这是可靠,安全和/或良好的做法吗?或者除了使用const int而不是enum之外,还有更好的方法来实现我想做的事情吗?我更喜欢枚举,但代码可靠性比可读性更重要.
我试图弄清楚一些C代码,以便我可以将它移植到python中.该代码用于读取专有的二进制数据文件格式.到目前为止它一直很简单 - 它主要是结构,我一直在使用struct库来从文件中请求特定的ctypes.但是,我刚刚提到了这段代码,我对如何在python中实现它感到茫然.特别是,我不知道如何处理enum或者union.
#define BYTE char
#define UBYTE unsigned char
#define WORD short
#define UWORD unsigned short
typedef enum {
TEEG_EVENT_TAB1=1,
TEEG_EVENT_TAB2=2
} TEEG_TYPE;
typedef struct
{
TEEG_TYPE Teeg;
long Size;
union
{
void *Ptr; // Memory pointer
long Offset
};
} TEEG;
Run Code Online (Sandbox Code Playgroud)
其次,在下面的struct定义中,我不确定变量名后面的冒号是什么意思,(例如KeyPad:4).这是否意味着我应该读4个字节?
typedef struct
{
UWORD StimType;
UBYTE KeyBoard;
UBYTE KeyPad:4;
UBYTE Accept:4;
long Offset;
} EVENT1;
Run Code Online (Sandbox Code Playgroud)
如果它有用,我在python中访问文件的方式的抽象示例如下:
from struct import unpack, calcsize
def get(ctype, size=1):
"""Reads and unpacks binary … 我有这个C代码:
/*
WARNING: The order of this table must also match the order of a table
located in AcquireResizeFilter() in "resize.c" otherwise the users filter
will not match the actual filter that is setup.
*/
typedef enum
{
UndefinedFilter,
PointFilter,
BoxFilter,
TriangleFilter,
HermiteFilter,
HannFilter,
HammingFilter,
BlackmanFilter,
GaussianFilter,
QuadraticFilter,
CubicFilter,
CatromFilter,
MitchellFilter,
JincFilter,
SincFilter,
SincFastFilter,
KaiserFilter,
WelchFilter,
ParzenFilter,
BohmanFilter,
BartlettFilter,
LagrangeFilter,
LanczosFilter,
LanczosSharpFilter,
Lanczos2Filter,
Lanczos2SharpFilter,
RobidouxFilter,
RobidouxSharpFilter,
CosineFilter,
SplineFilter,
LanczosRadiusFilter,
CubicSplineFilter,
SentinelFilter /* a count of all the filters, not a …Run Code Online (Sandbox Code Playgroud) 可能重复:
C++中枚举类型数据的大小是多少?
如何在内部存储枚举数据类型(我想象为8/16/32位int?)并且可以安全地序列化,还是应该使用像quint8这样的值来存储值?换句话说,sizeof(MyEnum)在所有平台上保证大小相同?
我读过有关该主题的几个问题:
我知道在宏上通常首选#define枚举,以获得更好的封装和/或可读性。另外,它允许编译器检查类型以防止出现某些错误。
const声明介于两者之间,允许类型检查和封装,但更混乱。
现在我在内存空间非常有限的嵌入式应用程序中工作(我们经常必须争取字节节省)。我的第一个想法是常量比枚举占用更多的内存。但我意识到我不确定常数将如何出现在最终固件中。
例子:
enum { standby, starting, active, stoping } state;
Run Code Online (Sandbox Code Playgroud)
在资源有限的环境中,enumVS#define与 VSstatic const在执行速度和内存占用方面如何比较?
如果我创建一个enum像这样
enum test {
a=0,
b
};
Run Code Online (Sandbox Code Playgroud)
类型变量是否enum test在内存中存储为 1 位,因为这是表示它所需的最小值?
我试图了解遗留数据库中的一些C代码.那里有以下形式的结构:
enum {a=0,b,c,d};
这实现了什么?在手册中,我只看到表单的结构:
enum example{a=0,b,c,d} test1; 而我明白了.
谢谢,Suresh
首先,这类似于:如何隐式转换整数类型?但是有一个不同的MISRA警告.
编译器不会生成MISRA错误,但静态分析工具会生成错误.我有一张正在进行工具制造商的票.
鉴于:
#include <stdio.h>
enum Color {RED, VIOLET, BLUE, GREEN, YELLOW, ORANGE};
int main(void)
{
enum Color my_color;
my_color = BLUE;
if (my_color == YELLOW) // Generates MISRA violation, see below.
{
printf("Color is yellow.\n");
}
else
{
printf("Color is not yellow.\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
静态分析工具正在为if语句生成MISRA违规:
MISRA-2004 Rule 10.1 violation: implicitly changing the signedness of an expression.
Converting "4", with underlying type "char" (8 bits, signed),
to type "unsigned int" (32 bits, unsigned) with …Run Code Online (Sandbox Code Playgroud) 这个枚举的大小是多少,以字节为单位?C++
enum Cars { Toyota, Suzuki, Volkswa, Mitsubish, Alfarome, Holden, Bradleys };
Run Code Online (Sandbox Code Playgroud)