C语言#pragma指令问题:VS2019下#pragma startup未生效求解
你遇到的问题是#pragma startup这一MSVC非标准编译指令的使用不符合要求导致的,具体问题和修复方法如下:
- 首先,
#pragma startup是微软MSVC编译器独有的非标准扩展,完整语法要求指定执行优先级,格式为#pragma startup 函数名 优先级数值- 优先级数值范围为0255:099预留给C运行时库初始化使用,100199区间的优先级会让函数在`main`函数执行前运行,200255区间的优先级会让函数在
main函数执行结束后运行 - 你没有指定优先级时,编译器默认会采用最高的优先级数值255,也就是
f1会在main执行结束后才运行,而main返回0后程序直接退出,自然看不到f1的输出
- 优先级数值范围为0255:099预留给C运行时库初始化使用,100199区间的优先级会让函数在`main`函数执行前运行,200255区间的优先级会让函数在
- 修复方法:给
#pragma startup补充100~199之间的优先级即可,修改对应代码行:
#pragma startup f1 150
修改后重新编译运行,就能看到预期的输出顺序。
另外补充两个注意点:
#pragma startup指定的函数必须是无参数、无返回值的全局函数,不能用static修饰,否则指令不生效- 该指令仅适用于MSVC编译器,不属于C语言标准语法,跨编译器场景不建议使用
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

