小编Ami*_*mar的帖子

C程序在不同的编译器上给出不同的输出

我运行了一个C程序,并在不同的C编译器上获得了不同的输出.以下是我的计划

void main()
{
    int i=5;
     printf("%d%d%d%d%d",i++,i--,++i,--i,i);
}
Run Code Online (Sandbox Code Playgroud)

ON boarnland c ++ complier o/p is

45545

并在gcc上

45555

是真的依赖于编译器还是依赖于操作系统?

函数调用中的参数从左到右被压入堆栈.评估是从堆栈弹出.并且评估是从右到左,因此结果.

c gcc turbo-c++

1
推荐指数
1
解决办法
1617
查看次数

编写循环的最佳方法是哪种?

我想知道哪个是编写循环的最佳方法?

Count Down_to_Zero循环优于Count_Up_Loops吗?特别是在嵌入式系统环境中哪一个更好选择???

c embedded loops

1
推荐指数
1
解决办法
1313
查看次数

printf支持函数重载在C?

可能重复:
C是否支持重载?

我想知道printf是否支持C中的函数重载,因为在一个C程序中可以以多种方式使用相同的printf函数.

c

1
推荐指数
1
解决办法
3203
查看次数

这种结构的大小出乎意料吗?

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

大家好,

我想知道下面结构的大小是多少.根据我的计算它应该是20.还有一件事是这种结构有什么方法考虑它的变量t的大小?

请忽略任何语法错误,我在32位机器上

 struct structc
{ 

char        c; 
double      d; 
int         s;
} t;

main()
{
printf("sizeof(structc_t) = %d\n", sizeof(t)); 
} 
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
193
查看次数

它是否适用于非16位的机器

我在接受采访时被问过,这台机器上的有效声明是不是16位?

以下是声明,

 unsigned int zero = 0;
 unsigned int compzero = 0xFFFF;
Run Code Online (Sandbox Code Playgroud)

c

1
推荐指数
1
解决办法
305
查看次数

如何在C中解决给定的typedef

我有几个typedef语句,但现在确定它有原始类型

 typedef unsigned int addrt;
 typedef addrt addr32t;
Run Code Online (Sandbox Code Playgroud)

"addr32t"只是一个无符号整数吗?

c typedef

1
推荐指数
2
解决办法
108
查看次数

为什么我在运行readelf -s时获得此输出

我有Linux内核并尝试使用objcopy工具生成ELF Header,下面是第一步

     objcopy -I binary -B i386 -O elf32-i386 --rename-section .data=.text linux_kernel.bin  main.o
Run Code Online (Sandbox Code Playgroud)

在此之后我想使用readelf -s main.o读取符号表,但是输出下面的奇怪符号

   Symbol table '.symtab' contains 5 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
 0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
 1: 00000000     0 SECTION LOCAL  DEFAULT    1 
 2: 00000000     0 NOTYPE  GLOBAL DEFAULT    1 _binary_linux_kernel_bin_
 3: 004df650     0 NOTYPE  GLOBAL DEFAULT    1 _binary_linux_kernel_bin_
 4: 004df650     0 NOTYPE  GLOBAL DEFAULT  ABS _binary_linux_kernel_bin_
Run Code Online (Sandbox Code Playgroud)

现在应该可以看到像这样的符号

_binary_linux_kernel_bin_start
_binary_linux_kernel_bin__end
_binary_linux_kernel_bin_size
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道我在哪里做错了吗?还是期待一个?

为什么我想看到正确的符号,因为必须做类似下面的事情

 --entry_point=_binary_linux_kernel_bin_start
Run Code Online (Sandbox Code Playgroud)

elf linux-kernel objcopy

1
推荐指数
1
解决办法
1294
查看次数

我们可以将局部变量推送到汇编中

我制作了一个简单的程序,只需按下一个数字并将其显示在屏幕上,但不知道出了什么问题

section .data
value db 10

section .text
global main
extern printf
main:
push 10   //can we push value directly on stack?
call printf
add esp,4
ret
Run Code Online (Sandbox Code Playgroud)

以上获取分段错误.

section .data
value db 10

section .text
global main
extern printf
main:
push [value]   
call printf
add esp,4
ret
Run Code Online (Sandbox Code Playgroud)

在第二个版本中,将值变量指向的值推送到堆栈

但是"未指定操作大小"

c x86 assembly

1
推荐指数
1
解决办法
1474
查看次数

将EFI内存映射转换为E820映射

我是Linux新手并且学习Linux如何了解可用的物理存储器.我知道有一些BIOS系统调用int 0x15,它将为你提供E20内存映射.

现在我找到了一段代码,其中说明了将EFI内存映射转换为E820内存映射的定义.上面的意思是什么?

这是否意味着主板固件是基于EFI的,但由于此代码在x86上运行,我们需要将其转换为E820内存映射

如果是这样,x86是否只知道E820内存映射?

E820和EFI内存映射有什么区别?

期待得到详细的答案.

linux x86 bios bootloader efi

1
推荐指数
1
解决办法
4004
查看次数

在内存映射设备的情况下使用Volatile?

以下链接说"始终未访问设备寄存器的访问权限"

http://techpubs.sgi.com/library/dynaweb_docs/hdwr/SGI_Developer/books/DevDrvrO2_PG/sgi_html/ch01.html

我的问题是,当访问存储器映射的设备寄存器时,我们是否需要易失性?

c volatile embedded-linux

1
推荐指数
1
解决办法
495
查看次数