宏内的 GNU 汇编器标识符串联

问题描述 投票:0回答:1

我想将一个字符串附加到 gcc 汇编器中的宏参数中。这是我目前拥有的:

以下宏将文件嵌入到我的代码中,效果很好:

.macro add_resource resource_name, file_name
    .global \resource_name
    .type \resource_name, @object
    .balign 4
\resource_name:
    .incbin "\file_name"
end_\resource_name:
    .global size_\resource_name
    .type size_\resource_name, @object
    .balign 4
size_\resource_name:
    .int end_\resource_name - \resource_name
.endm

.section .rodata

add_resource icon, "icon.png"

用途:

#include <stdio.h>
extern unsigned char icon[];
extern unsigned int size_icon;
int main() {
    printf("magic bytes: %.3s, size: %u", icon+1, size_icon);
    return 0;
}

在生成的可执行文件上运行

nm

0000000000f99b9d r end_icon
0000000000002020 R icon
0000000000f99ba0 R size_icon

程序打印“magic bytes: PNG, size: 16350077”。

但是名称“size_icon”看起来很糟糕,我想附加“size”,而不是前置它,这将使其成为“icon_size”。但我不知道该怎么做,并且在文档中找不到任何有用的东西。有人可以帮忙吗?

assembly macros identifier gnu-assembler
1个回答
0
投票

正如 Jester 所指出的,我忽略了

\()
语法。我可以写
\resource_name\()_size
,它将生成“image_size”标识符。

© www.soinside.com 2019 - 2024. All rights reserved.