标题:VS2013不支持C11求解决办法
只看楼主
里奥利奥
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-6-9
 问题点数:0 回复次数:10 
VS2013不支持C11求解决办法
使用的书是Ivor Horton的《Beginning C》,和VS 2013

书中提到对C11的支持,并给了一段代码检测自己的编译器是否支持。
#include "stdio.h"
int main(void)
{
   #if defined __STDC_LIB_EXT1__
       printf("Optional functions are defined.\n");
   #else
       printf("Optional functions are not defined.\n");
   #endif
       return 0;
}
我得到的输出结果是 Option functions are not defined.

那么,书中给出的解决办法是添加一条预处理器指令
#define __STDC_WANT_LIB_EXT1__ 1;

但是添加这条指令后得到的输出结果仍然是are not defined
不知道怎么解决,还有这其中的机制是怎样的?请求大家指点。
搜索更多相关主题的帖子: include 处理器 return 编译器 检测 
2015-06-15 11:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
VS2013不支持C11求解决办法
------ 没有任何解决办法,只能不用VC系列。

支持不支持C11,和 __STDC_LIB_EXT1__ 没关系,应该看 __STDC_VERSION__ 的定义;
__STDC_LIB_EXT1__ 只用来标明是否支持 Bounds-checking interfaces,仅当在支持BCI时,__STDC_WANT_LIB_EXT1__ 用来支持是否引入BCI。

#define __STDC_WANT_LIB_EXT1__ 1;
应该是 #define __STDC_WANT_LIB_EXT1__ 1 吧?!没有后面的分号。
2015-06-15 12:31
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
得分:0 
新版本其实也不一定好用是不是?
2015-06-15 16:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 w2009w
好用不好用我不知道。
我只知道,无论多新的VC,皆不支持现今的C语言,一直是老旧的C89/C90。
只有偶尔因为修改C++编译器的时候,不小心将一些通用的功能带入到C编译中,那其实不是在支持C99/C11,那其实应当算是bug。
每次VC一更新,总有人提C语言的事儿,M$总如是回答“骚年,撸完早点睡!”
2015-06-15 16:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
vc2013支持C11,你的書亂教。

授人以渔,不授人以鱼。
2015-06-15 18:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是我曾經回別人的一段話:
以下是引用TonyDeng在2015-5-4 18:26:17的发言:

你能不能安装支持C++11的编译器vs2013?我担心就算把代码改为vs2010支持的,用vc6也未必能编译,到时你不会修改,那更麻烦。wube倒是会改,我也不清楚具体哪些地方不兼容。


C++11語法的權威書是《C++ Primer》第五版,那裏介紹的新語法才是C++11的,沒你這裏所說的那個。vc之所以不完全支持C99,是因爲“政治原因”(C++標準内部人士就是這樣解釋的),C++已經扭轉過來了。所謂的語言標準,是集合市面上大多數供應商和用戶的意見之後采納的容納法則,是標準兼顧現存,而不是强制生產者要如何。ISO的人員曾經解釋過,誰以爲標準是鐵則或可以完成全部編程任務,那是誤解了標準及其作用。

授人以渔,不授人以鱼。
2015-06-15 18:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
C++11的範圍for語句,其實就是從MS C++/CLI和C#中的foreach語句藉鑒過來的,這東西在微軟的C++編譯器中早已實現,所謂支持,不過把語法標識符改一下而已。是ISO在向各編譯器實現者學習,總結同性,然後宣佈爲標準。説到擁有非標準擴展,gcc就被ISO的人指出爲典型,是它自己先實現了一些非標準特性,然後操縱標準委員會納入爲標準,而那些特性并不爲別的編譯器生產者認可,故連帶標準也不支持,這樣,一旦有大的編譯器實現者不支持,標準就沒有意義,不成其爲標準。ISO的人解釋得很清楚,標準是各方的協議,哪怕是編譯器生產者或是程序員用戶,有一方不願意遵守的話,標準對他們而言就是不存在的,他們有自己一套自洽可行的實現即可,根本不需要理會標準——事實上市面的程序也沒幾個是僅以標準特性能夠實現的。

C++11新標準,已經不再是舊標準的簡單升級,在思想上都是翻天覆地的變化,《C++ Primer》的作者在第五版書的序言中首先就强調了這一點,宣稱是一門新的語言。C對C++而言早已是束縛(C++之父的話,他說正是爲了兼容C而保留了C的一些他深惡痛絕的特性是迫不得已),現在C++11標準之下的C++語言與舊C++也同樣有這種關係。

授人以渔,不授人以鱼。
2015-06-15 18:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
怎么又从C11跳到C++11了?
2015-06-15 19:47
里奥利奥
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-6-9
得分:0 
回复 3楼 w2009w
试过用VC++和DevC学习C语言,现在是因为换了Win8的笔记本所以只能用VS2013了。
就体验上来说,VS2013比起旧版的编译器无论是视觉效果还是实用性的功能都强大很多。但是一个编译器不可能做到尽善尽美吧。
2015-06-18 15:06
里奥利奥
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-6-9
得分:0 
回复 2楼 rjsp
啊,那个分号是我在这里打错的···
2015-06-18 15:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-446605-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075633 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved