g++ 命令行宏定义字节流

g++ command line macro define byte stream

本文关键字:字节流 宏定义 命令行 g++      更新时间:2023-10-16

我正在寻找通过选项 -D 从 gcc/g++ 命令行将字节流定义为宏的解决方案,例如 -Dxxx=byte_stream。

下面是代码片段,

#ifndef MAGIC_BYTES
#define MAGIC_BYTES "x01x02x00x00xa0xb0"
#endif

我希望每次我都可以在不编辑源代码的情况下重新编译代码,而是使用 -DMAGIC_BYTES=xxx 来定义字节流。

我知道编辑源代码可能是解决方案,但只是想知道如何从命令行定义这样的字节流。

更新

我把简单的代码放在下面解决这个问题,

/* When
 * compile: gcc -o macro ./macro.c
 * output: 0x1, 0x2, 0x3, 0x4, 0x5,
 *
 * compile: gcc -o macro -DMAGIC_BYTES="xa1xa2xa3xa4xa5" ./macro.c
 * output: 0x78, 0x61, 0x31, 0x78, 0x61, 
 * but I expect 0xa1, 0xa2, 0xa3, 0xa4, 0xa5
 */
#include <stdio.h>
#ifndef MAGIC_BYTES
#define MAGIC_BYTES "x01x02x03x04x05"
#endif
int main()
{
    char buf[] = { MAGIC_BYTES };
    for (int i = 0; i < 5; ++i)
        printf("%#x, ", buf[i]);
    printf("n");
    return 0;
}

首先,这在很大程度上取决于您的环境以及您正在使用的 shell。对于/bin/sh,您可以尝试类似的东西

-DMAGIC_BYTES='"x01x02"'

那就是用''转义整个字符串。