开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC (Ubuntu 4.8.2-19ubuntu1)
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
只有 -lm
问题(Question):
大家好...我最近才刚接触C
这边问的感觉应该是小问题,不过google都查不到...
还请各位鞭小力点
最近在看一段code,其年代久远(约1990)
可能是规范与现今有差异,或是当时平台不同(好像最早是在sparc上run的)
code里面常有一些疏漏
例如:
1. 令一变量int p,用以储存从外部读入的某个参数
之后为了要检查是否有顺利读入,而使用了判断式
if ( p == NULL )
来检查p是否仍在最初状态而尚未储存过资料
不过因为NULL约等于(void *)0
这样做意味着对int与pointer做比较,而会出现
warning: comparison between pointer and integer [enabled by default]
奇怪的是如果我不理他的话,这个功能是不会出错的
想问再出现[enabled by default]之后到底编译器做了什么事?
而且我不知道该如何修正...
NULL改成0的话,要是读入值真的是0就有问题了
或是我自己将初始直改成某个不可能会是读入资料的数值呢?(例如负数)
2. 使用了malloc、exit、strlen却没有 #include <stdlib.h>
同样的有warning出现
warning: incompatible implicit declaration of built-in
function ‘strlen’ [enabled by default]
这边我也是很好奇不去include到底compiler会做什么事
因为程式仍然可以执行,而且某些程式(很少,大约一两个)
在我 #include <stdlib.h>之后
反而会出现 segmentation fault,让我感到很疑惑
还烦请各位指点迷津,谢谢