【发布时间】:2015-08-01 23:05:03
【问题描述】:
我的代码是:
#include <stdio.h>
#include <string.h>
void main()
{
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
// printing with different formats
printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A,A,A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B,B,B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n", B,B,B);
// Example of unary address operator (dereferencing) and a %x
// format string
printf("variable A is at address: %08x\n", &A);
我正在使用 linux mint 中的终端进行编译,当我尝试使用 gcc 进行编译时,我收到以下错误消息:
basicStringFormatting.c: In function ‘main’:
basicStringFormatting.c:18:2: warning: format ‘%x’ expects argument
of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("variable A is at address: %08x\n", &A);
我要做的就是打印变量 A 的内存地址。
【问题讨论】:
-
void main()应该是int main(void)。如果您的书、教程或讲师告诉您使用void main(),请找到更好的。 -
@KeithThompson 这有什么关系?
-
@PrakharAgrawal:这很重要,因为 1989 年 ANSI C 标准引入了
void关键字,也指定 main 函数可以定义为int main(void) { /* ... */ }。它没有提及void main(),并且符合要求的实现可能会拒绝它。有很多书籍和教程建议使用void main();这强烈表明作者确实不太了解该语言。 (这适用于托管实现。对于独立实现,程序不在操作系统下运行,程序入口点是实现定义的。 -
@PrakharAgrawal:另见comp.lang.c FAQ,从问题 11.12a 开始。
标签: c pointers printf memory-address unary-operator