C语言 用-s编译和让所有东西都是静态的是一样的吗?

lnxxn5zx  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(92)

将函数声明为static使其仅在其文件中可用,而使用-s编译程序将使其所有全局函数和变量无法从应用程序外部访问。那么,如果我只是用-s编译一个应用程序,它是否与使所有内容都静态化具有相同的效果,或者它比这更复杂?
换句话说,这两个是否会产生相同的可执行文件:

/*** cc -s main.c ***/

#include <stdio.h>

void a(){
    printf("Hello world!\n");
}

int main(void){
    a();
    return 0;
}

###############################

/*** cc main.c ***/

#include <stdio.h>

static void a(){
    printf("Hello world!\n");
}

int main(void){
    a();
    return 0;
}
hjzp0vay

hjzp0vay1#

编译时的-s选项不会影响从应用程序外部访问函数和变量。-s只剥离符号,所以可执行文件会小一点。

相关问题