Пример Fastcall GCC

В вашем примере вы фактически не устанавливаете имя игрока на Джона, вы создаете объект с именем Джон.

Чтобы исправить это, объявите поле в вашем классе Player:

public class Player {
   String name;

   public Player(String name) {
       this.name = name;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }
}

Теперь вы можете создать столько игроков, сколько захотите, и назвать их:

Player player = new Player("John");

Когда вы хотите получить имя игрока, просто вызовите функцию getName().
Если вы хотите установить имя игрока, просто вызовите метод setName().

Чтобы напечатать имя игрока на консоли, используйте это:

System.out.println(player.getName());

Или вы можете переопределить метод toString() из Player, чтобы предложить текстовое представление объекта, в этом регистр только имя игрока:

@Override
public String toString() {
    return "Player[name=" + name + "]";
}

Тогда вы можете использовать:

System.out.println(player); // toString() is called if player != null
9
задан Björn Lindqvist 19 August 2015 в 08:25
поделиться

2 ответа

Нет никакого различия в способе, которым вызов заданной функции появился бы в коде C. Единственная разница была бы в объявлении функции. Руководство GCC имеет больше деталей.

$ cat fastcall.c
extern void foo1(int x, int y, int z, int a) __attribute__((fastcall));
extern void foo2(int x, int y, int z, int a);

void bar1()
{
    foo1(99, 100, 101, 102);
}

void bar2()
{
    foo2(89, 90, 91, 92);
}

$ gcc -m32 -O3 -S fastcall.c -o -
.
.
bar1:
.
.    
    movl    $100, %edx
    movl    $99, %ecx
    movl    $102, 4(%esp)
    movl    $101, (%esp)
    call    foo1
.
.
bar2:
.
.
    movl    $92, 12(%esp)
    movl    $91, 8(%esp)
    movl    $90, 4(%esp)
    movl    $89, (%esp)
    call    foo2
17
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: