gpt4 book ai didi

c++ - 'avct' 是合法的 long 值还是合法的 var/const?

转载 作者:行者123 更新时间:2023-11-28 07:31:36 25 4
gpt4 key购买 nike

我正在阅读 AVChat 的源代码。这是一个使用 UDP 和 DirectShow 的视频聊天程序。在头文件中GlobalDef.h , 但是,我发现一些定义如下:

// Messages
const long msg_FilterGraphError = 'avct' + 1;
const long msg_MediaTypeReceived = 'avct' + 2;
const long msg_TCPSocketAccepted = 'avct' + 3;
const long msg_UDPCommandReceived = 'avct' + 4;
const long msg_ModifyFilterGraph = 'avct' + 5;

// Let the main thread modify filter graph
#define WM_ModifyFilterGraph (WM_USER+123)

// UDP command defines
const long MAX_COMMAND_SIZE = 100;
const long cmd_ClientCalling = 'avct' + 100;
const long cmd_DeviceConfig = 'avct' + 101;
const long cmd_BuildFilterGraph = 'avct' + 102;
const long cmd_DisconnectRequest = 'avct' + 103;

我认为 '' 用于包围单个字符,那么为什么这段代码在我的 VS2010 上运行没有问题?这些长常量用作从客户端发送到服务器的命令。我设置了一个断点来观察值,VS 告诉我 'avct' = 1635148660。我还尝试在整个解决方案中搜索“avct”,除此之外找不到任何匹配项。所以请有人告诉我 'avct' 的值是如何生成的。

编辑:我发现如果在 '' 之间放置多个字符并将其提供给 char 变量,则只会传输最后一个字符。那可以解释为什么'avct'不会报错,但是我还是不知道这个值是怎么产生的。

最佳答案

从历史上看,原始 C 接受多字符字符基于历史原因,C 和 C++ 仍然是常量。与单字符常量不同,类型是int,并且值是实现定义的(但通常包括所涉及字符的某种组合)。

实际上,在新代码中应该避免使用它们,并且不能在可移植代码中使用(因为实现确实不同至于他们的意思)。

编辑:

就其值(value)而言:最典型的实现是或多或少相当于:

union
{
char c[sizeof(int)];
int i;
};

,将字符按顺序放在 c 中(并忽略任何不适合——第一个还是最后一个取决于实现),然后使用i的值作为值。这些结果显然取决于编码(但这是真的任何字符常量),还有字节顺序之类的东西和 int 的大小。因此,即使假设基于 ASCII编码,在我使用过的系统上,结果可能是0x617663740x746376610x63740x74630x61760x7661。 (而且这不考虑“异国情调”的架构9 位字节,或者 int 的大小为 6。)

关于c++ - 'avct' 是合法的 long 值还是合法的 var/const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17587686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com