3 回答
TA贡献1772条经验 获得超6个赞
输入xcode-select -print-path
终端窗口并检查您的安装目录。就我而言,输出是:/Applications/Xcode.app/Contents/Developer
如果情况相同,则在终端上使用以下命令可以解决问题:
sudo xcode-select --switch /Library/Developer/CommandLineTools
另一种选择是使用本期中提到的 CGO_CPPFLAGS ,但它可以在会话中工作:
export CGO_CPPFLAGS="-Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-builtin-requires-header"
TA贡献1871条经验 获得超13个赞
这是<pthread.h>
macOS 工具附带的一个错误:
这个宏甚至是虚假的,原因不止一个!中的定义<pthread.h>
是这样的:
#define _PTHREAD_SWIFT_IMPORTER_NULLABILITY_COMPAT \ defined(SWIFT_CLASS_EXTRA) && (!defined(SWIFT_SDK_OVERLAY_PTHREAD_EPOCH) || (SWIFT_SDK_OVERLAY_PTHREAD_EPOCH < 1))
宏扩展没有正确括起来。宏在同一个文件中以这种方式使用:
#if !_PTHREAD_SWIFT_IMPORTER_NULLABILITY_COMPAT
扩展为:
#if !defined(SWIFT_CLASS_EXTRA) && (!defined(SWIFT_SDK_OVERLAY_PTHREAD_EPOCH) || (SWIFT_SDK_OVERLAY_PTHREAD_EPOCH < 1))
!
仅适用于第一个测试而不适用defined(SWIFT_CLASS_EXTRA)
于整个布尔表达式。
编译器没有检测到这个问题,它只是抱怨defined
来自宏扩展的预处理器运算符,它具有 C 标准中指定的未定义行为:
6.10.1 条件包含
[...]
约束
1 控制条件包含的表达式应该是一个整数常量表达式,除了:它可能包含以下形式的一元运算符表达式
defined identifier
或者
defined ( identifier )
它评估
1
标识符当前是否定义为宏名称(即,如果它是预定义的,或者它是否是#define
预处理指令的主题,而没有#undef
具有相同主题标识符的干预指令),0
如果不是。2 在所有宏替换发生后剩余的每个预处理标记(在将成为控制表达式的预处理标记列表中)应采用词法形式的标记(6.4)。
语义
3 表单的预处理指令
#
if
常量表达式换行组选择
#
elif
常量表达式换行组选择检查控制常量表达式的计算结果是否为非零。
4 在评估之前,预处理标记列表中将成为控制常量表达式的宏调用被替换(除了那些由定义的一元运算符修改的宏名称),就像在普通文本中一样。如果令牌
defined
是作为替换过程的结果生成的,或者defined
一元运算符的使用与宏替换之前的两种指定形式之一不匹配,则行为未定义。在执行了由于宏扩展和defined
一元运算符而导致的所有替换之后,所有剩余的标识符(包括那些在词法上与关键字相同的标识符)都被替换为 pp-number0
,然后将每个预处理令牌转换为一个令牌。结果标记组成控制常量表达式,根据 6.6 的规则进行评估。出于此令牌转换和评估的目的,所有有符号整数类型和所有无符号整数类型的行为就好像它们分别具有与header 中定义的类型intmax_t
和定义相同的表示形式。这包括解释字符常量,这可能涉及将转义序列转换为执行字符集成员。这些字符常量的数值是否与表达式中出现相同字符常量时获得的值相匹配(除了在一个或uintmax_t
<stdint.h>
#if
#elif
指令)是实现定义的。此外,单字符字符常量是否可能具有负值是实现定义的。
这个相关的短语是如果令牌defined
是作为这个替换过程的结果生成的,或者defined
一元运算符的使用与宏替换之前的两种指定形式之一不匹配,则行为是未定义的。
目前尚不清楚生成只是意味着作为宏扩展的一部分生成,或者更具体地说是通过令牌粘贴生成。clang似乎认为任何defined
由宏扩展产生的标记在#if
控制表达式中都有未定义的行为。
出于这两个原因,这似乎是<pthread.h>
苹果要修复的一个错误。
TA贡献1851条经验 获得超4个赞
遗憾的是,所有的试训都没有奏效。
我已经使用 IntelliJ IDEA Ultimate 有一段时间了。所以我尝试使用 IDE 设置 Go SDK、GOROOT 和 GOPATH(我想到了一个想法)。
我在我的 MacBook 上卸载/删除了与 Go 相关的所有内容。
然后我在 IntelliJ IDEA 上安装了 Go 插件,果然提示 Go SDK 不可用,GOROOT 和 GOPATH 都没有设置。
我按照说明进行操作,其余的由 IntelliJ IDEA 负责!
它下载并安装了 Go SDK,让我选择 GOPATH,它索引了一些东西,现在一切都像魅力一样工作!
- 3 回答
- 0 关注
- 433 浏览
添加回答
举报