Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以用C++;结构?_C++_Assembly - Fatal编程技术网

C++ 是否可以用C++;结构?

C++ 是否可以用C++;结构?,c++,assembly,C++,Assembly,我试图在结构内部使用asm语法声明静态常量数据 也许是这样的 struct Z { public: static char hello[] = asm volatile(".ascii \"Hello\""); }; 请注意,这一点甚至还没有达到工作状态。:)而且我的组件已经生锈了 编辑: 对于那些对这个问题及其背后的原因感兴趣的人,请参见 这个问题是无关紧要的,我不想把这个问题弄得乱七八糟,因为除了我想要它的用途之外,它还有其他用途,这就是为什么我开始提出一个单独的问题 谢谢你的

我试图在结构内部使用asm语法声明静态常量数据

也许是这样的

struct Z
{
  public:
    static char hello[] = asm volatile(".ascii \"Hello\"");
};
请注意,这一点甚至还没有达到工作状态。:)而且我的组件已经生锈了

编辑:

对于那些对这个问题及其背后的原因感兴趣的人,请参见

这个问题是无关紧要的,我不想把这个问题弄得乱七八糟,因为除了我想要它的用途之外,它还有其他用途,这就是为什么我开始提出一个单独的问题


谢谢你的关心和帮助。

不,不是这样的。但是,如果编译器支持内联程序集,则可以进行内联程序集。另一种常见的(同样也是不可移植的)技术是使用汇编程序将代码组装成原始机器代码,然后将其包装成字节数组(您可以在各种外壳代码中看到这一点,其中有效负载是这样存储的)。

您的评论说您希望“生成一个以空结尾的字节字符串”。 这很简单,使用方便

char hello[] = { 'H', 'e', 'l', 'l', 'o' };
假设您知道(或可以计算)字符串的大小:

 char hello[5] = "Hello";
你想干什么就干什么

您还可以执行宏,如下所示:

#define STR(x, y)   const char x[sizeof(y)-1] = y
这对我很有用:

#include <stdio.h>

#define STR(x, y)   const char x[sizeof(y)-1] = y

STR(hello, "Hello");
STR(hello2, "Hello World");
STR(hello3, "Hello kerflunk");

#define PRINT(x) printf("size " #x "=%zd\n", sizeof(x));

int main()
{
    STR(bar, "Bar");

    PRINT(hello);
    PRINT(hello2);
    PRINT(hello3);
    PRINT(bar);

    return 0;
}

嗯。。。你想干什么?换句话说,你的目标是什么,做
staticcharhello[]char Z::hello[]=“hello\”结构之外的某个地方无法实现?我甚至不确定
asm
是否可以出现在任何已知编译器的表达式中。gcc,g++。尝试在没有终止NUL的情况下生成字符串文字。我并不是真的想用asm来做这件事,但我想我可以在短期内做。请不要说“不要那样做”。如果您想了解有关我的rational的更多信息,请参阅此处:@Adrian:因此我认为您的字符串存储在不同的内存块中,这比您的代码内存更严格,因为
sizeof(x)
肯定比在每个字符串的末尾存储一个零要占用更多字节的代码空间。这就是首先使用零终止的动机。@Adrian:我不完全确定你的意思,因为在某个地方你需要知道每个字符串的大小,这将占用代码中的一些空间。除非我不明白你到底在做什么。我想说的是,在一个中心位置调用strlen很可能比从使用字符串的代码中传递每个字符串的大小要短。但由于您实际上没有使用字符串发布任何代码,因此很难给出建议。我只是说,与“知道长度”相比,“结尾处的零”是一种节省空间的方法。“原始机器代码,然后将其包装成字节数组”你能解释一下吗?@Koushikn
unsigned char boom[]=“\xaf\x3c\x02\x90”
@Koushik使用汇编程序生成一系列CPU指令(将以二进制形式),然后将这些指令以十六进制形式放入字节数组中<代码>\x90\x90
等。您的意思是复制粘贴对吗?因为我的困惑是围绕着程序性地做它或不做。不,我正在寻找一种生成一个字节的方法,它不是以C++结尾的null。看起来又是一条死胡同。这甚至不能回答这个问题。@Adrian为什么?你没有给我们太多的机会,问题相当具体。如果你想知道我的理性,请看:@Adrian No.这个问题含糊不清。我想了解为什么这里显示的解决方案不适用于您的目的。@NikBougalis:问题是具体的。我想知道是否可以将汇编指令放在结构中来表示静态数据。答案是否定的。我的目的可以在另一个问题上找到。不,那是C99 IIRC。它是无效的C++。
size hello=5
size hello2=11
size hello3=14
size bar=3