1
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 报错估计是参数有问题。 |
2
cmdOptionKana 2021-04-07 11:39:39 +08:00
标准 != 实现
|
5
augustheart 2021-04-07 12:02:04 +08:00 via Android
想起来当年 GCC 的正则表达式的实现
|
6
agagega 2021-04-07 12:49:46 +08:00
#ifdef __linux__
int main () {} #else Not implemented; #endif clang 也是不会管的 |
7
bp0 2021-04-07 13:04:39 +08:00
这种不是应该
#error “Not yet implemented” 这样可以自定义错误消息,更具可读性。 |
8
chiu 2021-04-07 13:29:31 +08:00
请问有 Clang 报错的 error message 吗?
预处理后,如果汇编阶段看到的代码是前面两个 #if 分支之一,应该不会有什么语法错误,但如果汇编看到的是 #else 分支的 code,那应该 Clang/GCC 都会报错。 |
10
LANB0 2021-04-07 13:58:41 +08:00
检查两个条件编译宏吧,预处理阶段应该不会检查代码语法错误的
|
11
chiu 2021-04-07 14:01:15 +08:00
@xuegy #9
嗯,你正文中描述的情况应该是 GCC 的汇编没有看到 Not yet implemented; 这样的 code |