12-2 线程基本用法代码报错

来源:12-2 线程的基本用法

学以致用over

2022-03-22

自己手打的和直接运行老师您的项目都报错:
图片描述报错显示:
图片描述运行结果显示全部文本:

====================[ 构建 | 02.thread_how_to.c | Debug ]=========================
"D:\Clion 2021.1\bin\cmake\win\bin\cmake.exe" --build E:\ClionProject\ProgramInC-master\programinc\Chapter12\cmake-build-debug --target 02.thread_how_to.c
[ 33%] Building C object CMakeFiles/02.thread_how_to.c.dir/tinycthread/tinycthread.c.obj
tinycthread.c
D:\Windows Kits\10\include\10.0.18362.0\um\winbase.h(9305): warning C5105: 生成“已定义”的宏扩展具有未定义的行为
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(483): error C2054: 在“_Thread_local”之后应输入“(”
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(483): error C2085: “_tinycthread_tss_head”: 不在形参表中
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(483): error C2143: 语法错误: 缺少“;”(在“=”的前面)
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(484): error C2054: 在“_Thread_local”之后应输入“(”
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(484): error C2085: “_tinycthread_tss_tail”: 不在形参表中
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(484): error C2143: 语法错误: 缺少“;”(在“=”的前面)
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(497): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(497): warning C4047: “=”:“TinyCThreadTSSData *”与“int”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(513): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(513): warning C4047: “!=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(514): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(514): error C2223: “->next”的左侧必须指向结构/联合
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(515): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(515): warning C4022: “free”: 指针与实参 1 不匹配
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(516): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(516): warning C4047: “=”:“int”与“TinyCThreadTSSData *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(518): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(518): warning C4047: “=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(519): error C2065: “_tinycthread_tss_tail”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(519): warning C4047: “=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(527): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(527): warning C4047: “!=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(580): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(580): warning C4047: “!=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(654): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(654): warning C4047: “!=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(775): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(775): warning C4047: “==”:“TinyCThreadTSSData *”与“int”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(777): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(777): warning C4047: “=”:“int”与“TinyCThreadTSSData *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(781): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(781): warning C4047: “=”:“TinyCThreadTSSData *”与“int”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(791): error C2065: “_tinycthread_tss_tail”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(791): warning C4047: “==”:“TinyCThreadTSSData *”与“int”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(793): error C2065: “_tinycthread_tss_tail”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(793): warning C4047: “=”:“int”与“TinyCThreadTSSData *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(835): error C2065: “_tinycthread_tss_tail”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(835): warning C4047: “!=”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(837): error C2065: “_tinycthread_tss_tail”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(837): error C2223: “->next”的左侧必须指向结构/联合
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(841): error C2065: “_tinycthread_tss_tail”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(841): warning C4047: “=”:“int”与“TinyCThreadTSSData *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(844): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(844): warning C4047: “==”:“int”与“void *”的间接级别不同
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(846): error C2065: “_tinycthread_tss_head”: 未声明的标识符
E:\ClionProject\ProgramInC-master\programinc\Chapter12\tinycthread\tinycthread.c(846): warning C4047: “=”:“int”与“TinyCThreadTSSData *”的间接级别不同
NMAKE : fatal error U1077: “C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1429~1.301\bin\Hostx64\x64\cl.exe”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.

vs中也没有提示msvc需要升级,vs用的是visual studio 2019版本
图片描述

写回答

1回答

bennyhuo

2022-03-22

确认了一下问题,可能是 msvc 版本更新之后对 ThreadLocal 的支持收紧了。用 mingw 运行吧。msvc 本来也不是什么正经 C 编译器。

不过也可以 cmake 里面替换一下标准版本的设置,msvc 用 c99:

if (MSVC)
    # MSVC 现在对 C11 做了部分支持,反而导致 tinycthread 无法通过编译,因此我们还是以 C99 的模式运行本章示例
    set(CMAKE_C_STANDARD 99)
else()
    set(CMAKE_C_STANDARD 11)
endif ()

课程源码已经更新。


1
1
学以致用over
非常感谢!
2022-03-23
共1条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程