我知道无符号整数只是正数(和0),并且与普通int相比可以加倍.两者之间有什么区别吗?
int variable = 12;
Run Code Online (Sandbox Code Playgroud)
和:
signed int variable = 12;
Run Code Online (Sandbox Code Playgroud)
您何时以及为何使用signed关键字?
为什么以下代码会发出警告?
int main(void)
{
struct {int x; int y;} test = {42, 1337};
struct {int x; int y;} *test_ptr = &test;
}
Run Code Online (Sandbox Code Playgroud)
结果:
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
struct {int x; int y;} *test_ptr = &test;
^
Run Code Online (Sandbox Code Playgroud) 我希望能够做到这样的事情:
typedef struct
{
char* c_str;
} string;
string s = "hello";
Run Code Online (Sandbox Code Playgroud)
是否有可能以任何方式做到这一点?
我知道有可能这样做:
typedef struct
{
char* c_str;
} string;
string s = { "hello" };
Run Code Online (Sandbox Code Playgroud)
但是当它只是一个成员变量时,我不喜欢大括号.
什么是f代表在C标准库函数的名称?我注意到很多功能都有f他们的名字,这对我来说并没有多大意义.
例如:fgets,fopen,printf,scanf,sqrtf等.
当我调试一个C项目时,我可以看到它编译成的所有汇编代码.我想知道它是什么汇编语言.是NASM还是MASM还是其他什么?如果我使用内联汇编,我是否可以使用其他汇编语言?
我试图通过用bp减去sp寄存器来弄清楚如何获得堆栈中的项目数.我究竟做错了什么?我得到了完全错误的结果
MOV bp, 0x7E00
MOV sp, bp
PUSH 'A'
PUSH 'B'
PUSH 'C'
POP bx
MOV al, bl
CALL _printchar
POP bx
MOV al, bl
CALL _printchar
MOV bx, sp
SUB bx, bp
ADD bx, 48 ;To get ascii number
MOV al, bl
CALL _printchar
Run Code Online (Sandbox Code Playgroud)
这是输出:
CB.
我在我的程序中使用了 vsync,它工作正常,直到我最小化窗口。我在创建渲染器时这样做了:
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
Run Code Online (Sandbox Code Playgroud)
这是游戏循环:
while (running)
{
checkEvent();
handleKeyboard(timer.getDelta());
render();
}
Run Code Online (Sandbox Code Playgroud)
它给了我稳定的每秒 60 帧,但是当我最小化窗口时,我每秒得到超过 100000 帧。为什么会这样?
我只是注意到valgrind显示此代码分配内存:
#include <stdio.h>
int main(void)
{
puts("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
编译时的结果gcc (Ubuntu 5.3.1-14ubuntu2.1):
==25080== Memcheck, a memory error detector
==25080== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==25080== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==25080== Command: ./a.out
==25080==
Hello world
==25080==
==25080== HEAP SUMMARY:
==25080== in use at exit: 0 bytes in 0 blocks
==25080== total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated
==25080==
==25080== All heap blocks were …Run Code Online (Sandbox Code Playgroud) 我有两个问题.第一个:'或'与'cmp'有什么区别?我已经看过了两个,看起来他们做了同样的事情.我的第二个问题:做什么
or al, al
Run Code Online (Sandbox Code Playgroud)
意思?它不应该一直返回真(如x == x)吗?
使用Glade(GtkBuilder)时,我无法获得正确的应用程序菜单.这是我目前使用的代码:
void app_init(GtkApplication* app, void* userdata)
{
(void)userdata;
GActionEntry appactions[] = {
{"about", app_aboutaction, NULL, NULL, NULL, {0}},
{"quit", app_quitaction, NULL, NULL, NULL, {0}},
};
g_action_map_add_action_entries(
G_ACTION_MAP(app),
appactions,
sizeof appactions / sizeof *appactions,
app
);
GMenu* menu = g_menu_new();
g_menu_append(menu, "About", "app.about");
g_menu_append(menu, "Quit", "app.quit");
gtk_application_set_app_menu(app, G_MENU_MODEL(menu));
}
void app_ctor(GtkApplication* app, void* userdata)
{
(void)userdata;
GtkBuilder* builder = gtk_builder_new_from_file("./builder.ui");
GtkWindow* appwin = GTK_WINDOW(gtk_builder_get_object(builder, "window"));
gtk_window_set_application(appwin, app);
}
int main(int argc, char* argv[])
{
GtkApplication* app = gtk_application_new(NULL, G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, …Run Code Online (Sandbox Code Playgroud)