linux系统下,enum在C语言中和数字比较大小时的类型是int还是unsigned int

1 篇文章 0 订阅

操作系统:linux

enum枚举类型

#include <stdio.h>
enum test{
//不赋值时,默认第一个值为0,后续依次+1
A,
B,
C,
D,
};

int main(){
        enum test aa; 
        //C++中不允许直接给aa赋enum test以外的值,但是在C语言中是可以的
        aa=-2;
        if(aa>0){
                printf("aa>0\n");
        }else if(aa<0){
                printf("aa<0\n");
        }else{
                printf("aa=0\n");
        }
}

此时输出的居然是

$ gcc -o test test.c && ./test
aa>0

如果将枚举改成

enum test{
Y=-1,
//ABCD的值未变化
A,
B,
C,
D,
};

运行结果发生了变化

gcc -o test test.c && ./test
aa<0

所以结论是:
枚举值中没有负值时,编译器会将其解释为unsigned int类型,否则为int类型

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用C语言和libwebsockets库实现的简单聊天室的示例代码: 服务端代码(server.c): ```c #include <stdio.h> #include <string.h> #include <libwebsockets.h> #define MAX_CLIENTS 10 #define BUFFER_SIZE 4096 static struct lws *clients[MAX_CLIENTS] = {NULL}; static int callback_chat(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: // 连接建立,将客户端加入clients数组 for (int i = 0; i < MAX_CLIENTS; i++) { if (clients[i] == NULL) { clients[i] = wsi; break; } } break; case LWS_CALLBACK_RECEIVE: // 接收到客户端发来的消息,将消息转发给所有客户端 char buffer[BUFFER_SIZE]; snprintf(buffer, BUFFER_SIZE, "%s", (char *)in); for (int i = 0; i < MAX_CLIENTS; i++) { if (clients[i] != NULL && clients[i] != wsi) { lws_write(clients[i], (unsigned char *)buffer, strlen(buffer), LWS_WRITE_TEXT); } } break; case LWS_CALLBACK_CLOSED: // 连接关闭,将客户端从clients数组中删除 for (int i = 0; i < MAX_CLIENTS; i++) { if (clients[i] == wsi) { clients[i] = NULL; break; } } break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "chat", callback_chat, 0, BUFFER_SIZE }, { NULL, NULL, 0, 0 } }; int main(int argc, char **argv) { struct lws_context_creation_info info; memset(&info, 0, sizeof(info)); info.port = 8080; info.protocols = protocols; info.gid = -1; info.uid = -1; struct lws_context *context = lws_create_context(&info); if (context == NULL) { fprintf(stderr, "Error: Failed to create libwebsocket context\n"); return -1; } while (1) { lws_service(context, 50); } lws_context_destroy(context); return 0; } ``` 客户端代码(client.c): ```c #include <stdio.h> #include <string.h> #include <libwebsockets.h> #define BUFFER_SIZE 4096 static struct lws *wsi_client = NULL; static int callback_chat(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_CLIENT_ESTABLISHED: // 连接建立,记录wsi_client wsi_client = wsi; break; case LWS_CALLBACK_CLIENT_RECEIVE: // 接收到服务端发来的消息,输出到控制台 printf("[Client] Message received: %s\n", (char *)in); break; case LWS_CALLBACK_CLIENT_CLOSED: // 连接关闭,设置wsi_client为NULL wsi_client = NULL; break; default: break; } return 0; } static struct lws_protocols protocols[] = { { "chat", callback_chat, 0, BUFFER_SIZE }, { NULL, NULL, 0, 0 } }; int main(int argc, char **argv) { struct lws_context_creation_info info; memset(&info, 0, sizeof(info)); info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = protocols; info.gid = -1; info.uid = -1; struct lws_context *context = lws_create_context(&info); if (context == NULL) { fprintf(stderr, "Error: Failed to create libwebsocket context\n"); return -1; } struct lws_client_connect_info connect_info; memset(&connect_info, 0, sizeof(connect_info)); connect_info.context = context; connect_info.address = "localhost"; connect_info.port = 8080; connect_info.path = "/"; connect_info.host = lws_canonical_hostname(context); connect_info.origin = connect_info.host; connect_info.protocol = protocols[0].name; struct lws *wsi = lws_client_connect_via_info(&connect_info); if (wsi == NULL) { fprintf(stderr, "Error: Failed to connect to server\n"); lws_context_destroy(context); return -1; } while (wsi_client == NULL) { lws_service(context, 50); } char buffer[BUFFER_SIZE]; while (fgets(buffer, BUFFER_SIZE, stdin)) { if (wsi_client == NULL) { break; } buffer[strlen(buffer) - 1] = '\0'; lws_write(wsi_client, (unsigned char *)buffer, strlen(buffer), LWS_WRITE_TEXT); } lws_context_destroy(context); return 0; } ``` 运行服务端代码后,在另一个终端中运行客户端代码,即可进行多人聊天。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值