小编Adh*_*rov的帖子

输出sizeof()运算符的数据类型

我使用的是Ubuntu 16.04.5和GCC 5.4.0版.

我在玩sizeof()操作员,写下面的代码:

#include <stdio.h>

int main(int argc, char *argv[]){

        long int mylint = 31331313131.1313;

        printf("size of long int is %d\n", sizeof(mylint));
        printf("size of long int is %d\n", sizeof(long int));

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用gcc -o ... ...命令编译并期待:

size of long int is 8
size of long int is 8
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

fl_double_lint.c: In function ‘main’:
fl_double_lint.c:11:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]

  printf("size of long …
Run Code Online (Sandbox Code Playgroud)

c ubuntu sizeof gcc5 ubuntu-16.04

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

更好地替换C中的exit()和atexit()

我是C编程新手。我曾经认为使用exit()是终止进程的最干净方法(因为它能够删除临时文件,关闭打开的文件,正常终止进程...),但是当我man exit在终端上尝试命令时(Ubuntu 16.04.5,gcc 5.4) .0)我看到以下行:

exit()函数使用不受保护的全局变量,因此它不是线程安全的。

之后,我尝试进行一些有关更好地替代的研究exit()(从一开始就改变我的编程行为)。虽然这样做,我面对这个问题,其中的副作用exit()被提及,并建议使用atexit()适当地(部分至少)解决该问题。

在某些情况下,使用abort()优先于exit()。最重要的是,这个问题表明这atexit()可能也是有害的。

所以这是我的问题:

  • 是否有任何通用且更好的过程终止方式(可以保证像这样清洁,exit()并且在任何情况下都不会损害系统)?
  • 如果第一个问题的答案为“否!”,那么终止过程的最佳可能方式是什么(包括最有用的情况)?

c linux gcc exit atexit

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

标签 统计

c ×2

atexit ×1

exit ×1

gcc ×1

gcc5 ×1

linux ×1

sizeof ×1

ubuntu ×1

ubuntu-16.04 ×1