attribute
构造器和析构器;constructor修饰的函数会在main函数之前执行,destructor修饰的函数会在程序exit前调用.
reference:https://www.jianshu.com/p/29eb7b5c8b2d
https://blog.csdn.net/huasir_hit/article/details/77531942
https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html(官网)
getopt
https://www.jianshu.com/p/e46a37d7b776
https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html
在写c程序的时候,有时需要读入执行时的参数,这个就是用getopt实现的。
fseek
fseek 函数名: fseek
功 能: 重定位流上的文件指针
用 法: int fseek(FILE *stream, long offset, int fromwhere);
描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值: 成功,返回0,否则返回其他值
fgets
描述:
C 库函数 char fgets(char str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
声明:
下面是 fgets() 函数的声明。
char fgets(char str, int n, FILE *stream)
int main( int argc, char* argv[])参数解析
argc和argv参数在用命令行编译程序时有用。main( int argc, char argv[], char **env ) 中
第一个参数,int型的argc,为整型,用来统计程序运行时发送给main函数的命令行参数的个数,在VS中默认值为1。
第二个参数,char型的argv[],为字符串数组,用来存放指向的字符串参数的指针数组,每一个元素指向一个参数。各成员含义如下:
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
argv[3] 指向执行程序名后的第三个字符串
argv[argc] 为NULL
第三个参数,char**型的env,为字符串数组。env[]的每一个元素都包含ENVVAR=value形式的字符串,其中ENVVAR为环境变量,value为其对应的值。平时使用到的比较少。
断言在release和debug中的区别
linux:
在程序里使用assert断言, 通过gcc编译,执行可以执行。
assert在程序的release版本中仍然有效(不要与VC中的ASSERT混淆),要使assert失效,只有在包含assert头文件(assert.h)的语句前定义NDEBUG宏或在编译器参数中添加-DNDEBUG参数(gcc 加 -DNDEBUG) ,就是release版,assert就不会执行。
windows:
在vc中,assert在realse中失效,仅在debug中有效。
func
#include <stdio.h>void main(){printf("%s\n", __func__);}
output:
main
