
1 ho121 2021 年 4 月 7 日 #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 报错估计是参数有问题。 |
2 cmdOptionKana 2021 年 4 月 7 日 标准 != 实现 |
5 augustheart 2021 年 4 月 7 日 via Android 想起来当年 GCC 的正则表达式的实现 |
6 agagega 2021 年 4 月 7 日 #ifdef __linux__ int main () {} #else Not implemented; #endif clang 也是不会管的 |
7 bp0 2021 年 4 月 7 日 这种不是应该 #error “Not yet implemented” 这样可以自定义错误消息,更具可读性。 |
8 chiu 2021 年 4 月 7 日 请问有 Clang 报错的 error message 吗? 预处理后,如果汇编阶段看到的代码是前面两个 #if 分支之一,应该不会有什么语法错误,但如果汇编看到的是 #else 分支的 code,那应该 Clang/GCC 都会报错。 |
10 LANB0 2021 年 4 月 7 日 检查两个条件编译宏吧,预处理阶段应该不会检查代码语法错误的 |