c语言函数的大小 c语言各函数

c语言中函数名代表函数地址,那函数的大小(就是函数指令在内存中的字节数)怎么求?请解释一下

以在linux下为例,适用gcc编译一个名为test.c的文件,文件里面有个函数定义void test(void);

创新互联建站是一家集网站建设、成都网站设计、网站页面设计、网站优化SEO优化为一体的专业网络公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。

#include "stdio.h"

void test(void)

{

printf("test!!!\n");

}

int main(int arg, void *args[])

{

test();

return 0;

}

编译命令gcc -o test test.c 生成test可执行文件。

用readelf -s test命令可以读出test文件里面的各个段的大小。

Symbol table '.dynsym' contains 6 entries:

Num: Value Size Type Bind Vis Ndx Name

0: 00000000 0 NOTYPE LOCAL DEFAULT UND

1: 00000000 401 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.0 (2)

2: 00000000 391 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (2)

3: 0804845c 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used

4: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses

5: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__

Symbol table '.symtab' contains 71 entries:

Num: Value Size Type Bind Vis Ndx Name

0: 00000000 0 NOTYPE LOCAL DEFAULT UND

1: 08048114 0 SECTION LOCAL DEFAULT 1

2: 08048128 0 SECTION LOCAL DEFAULT 2

3: 08048148 0 SECTION LOCAL DEFAULT 3

4: 08048174 0 SECTION LOCAL DEFAULT 4

5: 080481d4 0 SECTION LOCAL DEFAULT 5

6: 08048232 0 SECTION LOCAL DEFAULT 6

7: 08048240 0 SECTION LOCAL DEFAULT 7

8: 08048260 0 SECTION LOCAL DEFAULT 8

9: 08048268 0 SECTION LOCAL DEFAULT 9

10: 08048280 0 SECTION LOCAL DEFAULT 10

11: 08048298 0 SECTION LOCAL DEFAULT 11

12: 080482d8 0 SECTION LOCAL DEFAULT 12

13: 0804843c 0 SECTION LOCAL DEFAULT 13

14: 08048458 0 SECTION LOCAL DEFAULT 14

15: 08048468 0 SECTION LOCAL DEFAULT 15

16: 0804946c 0 SECTION LOCAL DEFAULT 16

17: 08049474 0 SECTION LOCAL DEFAULT 17

18: 0804947c 0 SECTION LOCAL DEFAULT 18

19: 08049480 0 SECTION LOCAL DEFAULT 19

20: 08049548 0 SECTION LOCAL DEFAULT 20

21: 0804954c 0 SECTION LOCAL DEFAULT 21

22: 08049564 0 SECTION LOCAL DEFAULT 22

23: 08049570 0 SECTION LOCAL DEFAULT 23

24: 00000000 0 SECTION LOCAL DEFAULT 24

25: 00000000 0 SECTION LOCAL DEFAULT 25

26: 00000000 0 SECTION LOCAL DEFAULT 26

27: 00000000 0 SECTION LOCAL DEFAULT 27

28: 080482fc 0 FUNC LOCAL DEFAULT 12 call_gmon_start

29: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c

30: 0804946c 0 OBJECT LOCAL DEFAULT 16 __CTOR_LIST__

31: 08049474 0 OBJECT LOCAL DEFAULT 17 __DTOR_LIST__

32: 0804947c 0 OBJECT LOCAL DEFAULT 18 __JCR_LIST__

33: 08049570 1 OBJECT LOCAL DEFAULT 23 completed.4583

34: 0804956c 0 OBJECT LOCAL DEFAULT 22 p.4582

35: 08048320 0 FUNC LOCAL DEFAULT 12 __do_global_dtors_aux

36: 08048354 0 FUNC LOCAL DEFAULT 12 frame_dummy

37: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c

38: 08049470 0 OBJECT LOCAL DEFAULT 16 __CTOR_END__

39: 08049478 0 OBJECT LOCAL DEFAULT 17 __DTOR_END__

40: 08048468 0 OBJECT LOCAL DEFAULT 15 __FRAME_END__

41: 0804947c 0 OBJECT LOCAL DEFAULT 18 __JCR_END__

42: 08048414 0 FUNC LOCAL DEFAULT 12 __do_global_ctors_aux

43: 00000000 0 FILE LOCAL DEFAULT ABS test.c

44: 08049480 0 OBJECT GLOBAL DEFAULT 19 _DYNAMIC

45: 08048458 4 OBJECT GLOBAL DEFAULT 14 _fp_hw

46: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __fini_array_end

47: 08049568 0 OBJECT GLOBAL HIDDEN 22 __dso_handle

48: 0804840c 5 FUNC GLOBAL DEFAULT 12 __libc_csu_fini

49: 00000000 401 FUNC GLOBAL DEFAULT UND puts@@GLIBC_2.0

50: 08048280 0 FUNC GLOBAL DEFAULT 10 _init

51: 0804837c 24 FUNC GLOBAL DEFAULT 12 test

52: 080482d8 0 FUNC GLOBAL DEFAULT 12 _start

53: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __fini_array_start

54: 080483bc 79 FUNC GLOBAL DEFAULT 12 __libc_csu_init

55: 08049570 0 NOTYPE GLOBAL DEFAULT ABS __bss_start

56: 08048394 40 FUNC GLOBAL DEFAULT 12 main

57: 00000000 391 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_

58: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __init_array_end

59: 08049564 0 NOTYPE WEAK DEFAULT 22 data_start

60: 0804843c 0 FUNC GLOBAL DEFAULT 13 _fini

61: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __preinit_array_end

62: 08049570 0 NOTYPE GLOBAL DEFAULT ABS _edata

63: 0804954c 0 OBJECT GLOBAL HIDDEN 21 _GLOBAL_OFFSET_TABLE_

64: 08049574 0 NOTYPE GLOBAL DEFAULT ABS _end

65: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __init_array_start

66: 0804845c 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used

67: 08049564 0 NOTYPE GLOBAL DEFAULT 22 __data_start

68: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses

69: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __preinit_array_start

70: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__

其中,

51: 0804837c 24 FUNC GLOBAL DEFAULT 12 test

这行0804837c就是test()函数的起始地址,24就是test()函数的指令静态存储空间。

C语言求两个函数大小

问题1:

函数类型是int,应该加上

return

表达式;

问题2:

用主函数中的a,b,c当然是可以的,他们都是局部变量,在不同函数里边同名是没关系的

void表示空类型,void型的函数没有返回值,当前的main函数不就没有返回值吗?所以用void

附加问题:

用数组存储,然后进行排序

C语言函数比较大小

代码如下:

#include stdio.h

#include stdlib.h

int max(int a, int b) 

{

return a  b ? a : b;

}

int main()

{

int i, m, n;

scanf("%d", m);

for (i = 1; i  8; i++) {

scanf("%d", n);

m = max(m, n);

}

printf("最大数:%d\n", m);

system("pause");

return 0;

}

运行结果:

C语言中的函数是否区分大小写?

用大小写区分其实也算一种不错的做法。

在C\C++中都是区分大小写的。包括函数、标识符等等。

建议你看看匈牙利命名法,我想对你会有很大的帮助:

匈牙利命名法

匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。

据说这种命名法是一位叫

Charles

Simonyi

的匈牙利程序员发明的,后来他在微软呆了几年,于是这种命名法就通过微软的各种产品和文档资料向世界传播开了。现在,大部分程序员不管自己使用什么软件进行开发,或多或少都使用了这种命名法。这种命名法的出发点是把量名变按:属性+类型+对象描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解,下面是HN变量命名规范,其中也有一些是我个人的偏向:

属性部分

全局变量

g_

常量

c_

c++类成员变量

m_

静态变量

s_

类型部分

指针

p

函数

fn

无效

v

句柄

h

长整型

l

布尔

b

浮点型(有时也指文件)

f

双字

dw

字符串

sz

短整型

n

双精度浮点

d

计数

c(通常用cnt)

字符

ch(通常用c)

整型

i(通常用n)

字节

by

w

实型

r

无符号

u

描述部分

最大

Max

最小

Min

初始化

Init

临时变量

T(或Temp)

源对象

Src

目的对象

Dest

这里顺便写几个例子:

hwnd

h

是类型描述,表示句柄,

wnd

是变量对象描述,表示窗口,所以

hwnd

表示窗口句柄;

pfnEatApple

pfn

是类型描述,表示指向函数的指针,

EatApple

是变量对象描述,所以它表示

指向

EatApple

函数的函数指针变量。

g_cch

g_

是属性描述,表示全局变量,c

ch

分别是计数类型和字符类型,一起表示变量类

型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。

上面就是HN命名法的一般规则。

详细请见我的参考资料。


当前标题:c语言函数的大小 c语言各函数
转载来源:http://scyanting.com/article/doiceho.html