g++ 命令行宏定义字节流
g++ command line macro define byte stream
我正在寻找通过选项 -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"'
那就是用''
转义整个字符串。
相关文章:
- C++宏定义和取消定义
- 根据 c++ 标准在该宏定义中推送/弹出宏时的行为是什么
- VS2017 #error: : snprintf 的宏定义与标准库函数声明冲突
- 从 C++ 中的无符号字符字节流中读取值
- 警告:左移计数 >= 在 C++ 中将字节流读取为双精度变量时的类型宽度
- 宏定义不正确没有错误
- C++ 中的字节流
- Visual Studio:snprintf 冲突的宏定义
- 宏定义中的预处理器令牌两边有两个双引号
- CMake 添加和删除宏定义以编译共享库/可执行文件
- 宏C++#定义示例(对象)(::f(s,(对象),arg1,arg2,arg3)
- Microsoft加密 API 是否允许从字节流创建 ECDSA 密钥?
- 根据模板参数选择宏定义
- 使用宏定义打印格式参数
- 组合宏定义以一次获得多个定义 [avr C++]
- 如何在可执行文件中查看宏定义值
- 是否有另一种方法可以在不使用宏定义的情况下进行此操作
- 如何理解宏定义
- 坚持理解以下宏定义
- g++ 命令行宏定义字节流