Not yet implemented; 是哪门子 C++语法?

2021-04-07 11:28:25 +08:00
 xuegy

参看这行:

https://github.com/Unofficial-Extend-Project-Mirror/openfoam-extend-swak4Foam-dev/blob/10d3b4511de81431031ede0502de32d870966d66/Libraries/simpleFunctionObjects/functionObjectProxy/executeIfExecutableFitsFunctionObject/executeIfExecutableFitsFunctionObject.C#L96

Clang 报错是合理的,为什么 GCC 可以正常编译?

2417 次点击
所在节点    C++
11 条回复
ho121
2021-04-07 11:39:28 +08:00
#ifdef darwin
{
char path[1024];
uint32_t size = sizeof(path);
if (_NSGetExecutablePath(path, &size) == 0) {
exePath=string(path);
}
}
#elif defined(__linux__)
{
const int bufSize=1024;
char path[bufSize];
label length=readlink("/proc/self/exe",path,bufSize-1);
path[length]='\0';
exePath=string(path);
}
#else
Not yet implemented;
#endif

意思是,当 darwin 和__linux__都没被定义的情况下,这段代码会被预处理为:Not yet implemented;
于是编译不会通过,这是故意为之。

Clang 报错估计是参数有问题。
cmdOptionKana
2021-04-07 11:39:39 +08:00
标准 != 实现
ho121
2021-04-07 11:41:57 +08:00
@ho121 意思是:我只支持 darwin 和 linux,其它环境下没有实现,不给编译
xuegy
2021-04-07 11:45:45 +08:00
@ho121 有没有可能是 GCC 只要进入了某个分支其他的就不管了,Clang 非常倔强的要保证每个分支语法都对?
augustheart
2021-04-07 12:02:04 +08:00
想起来当年 GCC 的正则表达式的实现
agagega
2021-04-07 12:49:46 +08:00
#ifdef __linux__
int main () {}
#else
Not implemented;
#endif

clang 也是不会管的
bp0
2021-04-07 13:04:39 +08:00
这种不是应该

#error “Not yet implemented”

这样可以自定义错误消息,更具可读性。
chiu
2021-04-07 13:29:31 +08:00
请问有 Clang 报错的 error message 吗?
预处理后,如果汇编阶段看到的代码是前面两个 #if 分支之一,应该不会有什么语法错误,但如果汇编看到的是 #else 分支的 code,那应该 Clang/GCC 都会报错。
xuegy
2021-04-07 13:36:19 +08:00
@chiu not 错,yet 错,implemented 错,就这样...
LANB0
2021-04-07 13:58:41 +08:00
检查两个条件编译宏吧,预处理阶段应该不会检查代码语法错误的
chiu
2021-04-07 14:01:15 +08:00
@xuegy #9
嗯,你正文中描述的情况应该是 GCC 的汇编没有看到 Not yet implemented; 这样的 code

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/768645

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX