跑在main之前

最初发表在QQ空间(这里贴图不方便),全文见 跑在main之前跑在main之前 (2) ,有图有真相。大笑

通常这是一个面试题,如何让一段代码跑在main()函数前面。一个熟练的C++开发者能够轻易给出答案,即静态初始化

在C里面又如何呢,有没有办法做到这点?下面讲一个VC里的方法。

int initBeforeMain()
{
printf( "initBeforeMain (%p)/r/n", initBeforeMain );
return 0;
}

int init2BeforeMain()
{
printf( "init2BeforeMain (%p)/r/n", init2BeforeMain );
return 0;
}

int initBreak()
{
DebugBreak();
return 0;
}

typedef int (*pInit)();

// for C

// put following table between __xi_a and __xi_z

#pragma data_seg( ".CRT$XIU" )
pInit start[] = {initBeforeMain, init2BeforeMain, initBreak, };
#pragma data_seg()

// for C++

// put following table between __xc_a and __xc_z

#pragma data_seg( ".CRT$XCU" )
pInit start2[] = {initBeforeMain, init2BeforeMain, initBreak, };
#pragma data_seg()

// for C

// put following pointer between __xi_a and __xi_z but after start

#pragma data_seg( ".CRT$XIU" )
pInit start3 = initBreak;
#pragma data_seg()

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


在调试器里执行一下,看看效果如何,有没有给你surprise。

..... (全文见上方链接)

 

 

### 如何在树莓派上执行 `main` 函数 要在树莓派上运行带有 `main` 函数的代码或程序,通常需要遵循 Python 的标准脚本执行方式。以下是具体方法以及一个完整的示例。 #### 方法说明 Python 中并没有像 C 或其他语言那样的显式 `main` 函数入口点,但可以通过条件语句模拟这一行为。如果希望某个函数作为程序的主要逻辑入口,则可以定义该函数并命名为 `main()`,并通过以下代码调用它: ```python if __name__ == '__main__': main() ``` 这段代码的作用是当脚本被直接运行时会触发 `main()` 函数;而如果是通过导入的方式加载此模块,则不会自动执行 `main()` 函数[^1]。 #### 示例代码 下面是一个简单的例子展示如何创建和调用 `main` 函数: ```python #!/usr/bin/env python import RPi.GPIO as GPIO import time RelayPin = 11 # 定义继电器控制引脚为GPIO17 (BOARD编号) def setup(): """初始化GPIO设置""" GPIO.setmode(GPIO.BOARD) # 使用物理引脚编号模式 GPIO.setup(RelayPin, GPIO.OUT) GPIO.output(RelayPin, GPIO.HIGH) def loop(): """循环操作继电器开关""" while True: print('... relay on') GPIO.output(RelayPin, GPIO.LOW) time.sleep(0.5) print('relay off ...') GPIO.output(RelayPin, GPIO.HIGH) time.sleep(0.5) def destroy(): """清理GPIO资源""" GPIO.output(RelayPin, GPIO.HIGH) GPIO.cleanup() def main(): """主函数,负责启动setup(), 执行loop() 并处理异常退出情况""" setup() try: loop() except KeyboardInterrupt: # 当按下 Ctrl+C 键组合时停止程序 destroy() # 如果脚本被直接运行则进入此处 if __name__ == '__main__': main() ``` 以上代码片段展示了如何构建基于树莓派硬件交互的应用程序框架,并包含了基本错误捕获机制以确保安全关闭设备[^2]。 #### 注意事项 - **权限问题**: 对某些外设的操作可能需要管理员权限,在终端中使用命令前加上 `sudo` 可能必要。 - **环境配置**: 确保已安装必要的库如 `RPi.GPIO` ,可通过 pip 工具完成安装 (`pip install RPi.GPIO`)。 - **硬件连接确认**: 在实际部署之前,请仔细核对电路连线无误以免损坏组件[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值