![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.5ベストアンサー
- 回答日時:
C言語とVBの明確な違いを挙げて見ます。
C言語はかなり使い込んでいるのですが、VBは使い込んでいないので「もっといい」方法があるかもしれません。
※ポインタの有無?
VBにポインタってあったっけ?
Cでポインタに慣れてしまうと、その他のポインタの使えない言語でプログラムが書きにくくて仕方ない。
例えば、ある文字配列(Cでの表現)の8文字目が知りたいとき、Cなら
*(string+7) // これは式だから速い!!
だがVBだと関数を使わなければならない?
mid( string, 8, 1 ) ' 関数だから遅い!!
関数のポインタなんて覚えた日にゃ、ポインタを使えない言語がかわいそ過ぎる。
逆アセンブラを作ったときに実感した。
※配列の添え字がCでは0から始まるが、VBでは1から始まる。1から始まるのは、どう考えてもおかしい。要素1つ分損する。
※VBでは文字列の連結を
string1 = string1 + string2
と書くが、コンピュータの仕組み(ハード的なことやOSのこと)を細部まで知っていると、なぜこのような文法が許されるのかが疑問になる。
※VBは、数値・文字・文字列が曖昧だけど、Cでは明確に分かれている。
VBでは、文字列で宣言されたstringに"123.456"が代入されているときに整数で宣言されたint_valにstringを代入できてしまう。勿論、実数で宣言されたreal_valにも代入できてしまう。
int_val = string ' これができてしまう。int_valの値は、123だ。
real_val = string ' これができてしまう。real_valの値は、123.456だ。
Cでは、値のキャストができる。すなわち、実数型変数realの整数部分が欲しいときは、
(int)real // 変数のキャスティングと言う。
とすれば良い。しかし、VBでは、
int( real ) ' ここでも関数を使わなければならない。
とする必要がある。
※Cはフリーフォーマットだけど、VBは書式に制限がある。
式が長くなりすぎて、2行に分けたいときに行末に _ を書かなきゃいけないって、おかしいぞ、VBよ。
※Cは、非常に理論的な言語である。
#2の回答にもあるが、Cの代入は = で表し、比較の等号は == である(Pascalでは、代入は :=、比較の等号は =。)。
したがって、if ( a = foo( z ) ) ... と記述できる。
これは、関数foo()にzを渡した結果をaに代入して、if文で条件分岐、と言うこと。
VBではこのような記述はできない。なぜなら、VBのif文での = は、比較の等号だから代入にはなり得ない。
※VBでは関数とプロシージャ(サブルーチンだっけ?)と意味的に同じモノを区別しているが、Cでは関数しかない。
VBで関数の戻り値を捨てるとエラーになる。これは余計なお世話だ。Cでは戻り値のある関数の戻り値は捨てても全然問題ない。戻り値を使う・使わないはプログラマの自由だ(ここら辺も論理的、ヒュ~!!)。
No.9
- 回答日時:
No.6さんへ
>Cの配列は、
>val[foo()][func()]
>のような使い方もできる。
Cだけでなく、最近の言語で出来ないのはありません。
出来ないのはFORTRAN位(Fortran77以前の)です。
No.8
- 回答日時:
> 最初Cの勉強はじめるときこなこと数人の方にいわれました。
「CとVB同時に学ぶと頭が混乱するから避けたほうが良い」と。> これって本当ですか?
CとVBよりもCとC++とJavaを同時にやると、
構文が似通っているのに、
何でこれができないのかに迷うと思います。
VBはまったくといっていいほど、
Cとは異なる言語という発想でいけば、
それほど難しいとは思いません。
構文がまったく違うといってもいいです。
> VBのいいところって何?
1.画面設計が楽。
2.敬称という概念が無い。(悪いところでも有るけど。)
> VBとCの違いってなに?
&&という論理演算子が有るか無いか。
Cで出来ることの90%はVBでも出来る。
VBで出来ることの100%をCはできる。
ちなみにVBにもポインタの概念は有ります。
関数ポインタはあたりまえのように使えますが、
変数ポインタはほとんど使えないに等しいです。
No.7
- 回答日時:
言語と言語の差・優劣
言語の特徴
などの質問が時々質問でのりますが、あまり意味がないように思う。
なぜなら
1冊の本に説明するようなテーマに対し、回答許容文字数は数百字。とても十分説明できない場合が多い。
エッセンスの説明や根底概念は、これから学ぶ人には理解が難しい。
回答の優劣、正否を判定する力が質問者にない場合が多いはず。
他人の習得エッセンスを借り物にしてしまう危険性あり。自分が本を読むなり、練習問題をやるなりすべき。
意見・回答は個人差が大きい。群盲象を撫ず。
いつも質問のテーマ念頭に置きつつ、自分で体験中、体験後にまとめるべきテーマであると思う。
-----
一般になぜ同時に学ぶのか理解できないが、学校の授業プログラムならやむをえないが、独学なら、そんな余裕はないでしょう。仕事で、両者を結合しないとならないのなら、つべこべいえないでしょう。
ーーー
プログラム記法(たとえば文の区切りの;と改行、配列記法、演算子、If、ForNext、大文字小文字、他多数)
概念の問題(ポインタ、データ型、オブジェクト諸関連、引数、クラス)
コンパイル型
などありますが
C->C++->Java-->
Basic->VB->VB.NET以後ー>
と近づいた感じです。
ーーーー
言語のどれを選ぶよりも、むしろ仕事を解決するために利用する場合、アルゴリズムや処理の流れ、文書化、データネームをはじめ書法の統一、分割化(共通部分の分割)
などの方が、立ちふさがる問題のように思いますので、そちらにもご留意が必要と思う。
No.6
- 回答日時:
#5です。
もう一つ、CとVBの違いがありました。
※配列の表現方法が違う。
Cでは、変数に[]を付けることで配列にする。しかも、これは、演算子の一つである。VBでは()を付けるが、これは次の問題点がある。
foo(1,3,5) ' 果たしてfooは関数か変数の(3次元)配列か?
変数名()という表現は関数名()と同じなので、関数と変数の違いがわからない。
Cでは、val[4]とすればvalという変数の5番目の要素となり、foo( 8 )とすれば関数foo()に8を渡しているとなる。
Cの2次元配列は、
val[2,5]
と表現しないで
val[2][5]
となる。すなわち、変数valに[]という演算子が付いてval[]となり、さらにval[]に[]という演算子が付いてval[][]となったのだ([]内の数値は省略)。
Cの配列は、
val[foo()][func()]
のような使い方もできる。ただし、foo()とfunc()の型はint(またはchar)であるかint(またはchar)にキャストされなければならない。
やはり、理論的なんだ、Cは。
※※※ C言語の論理性に惹かれてC言語を主として使っているのでC言語に偏っていることをお詫びします。 ※※※
誰か、間違いがあったら指摘してくださいね。
いい加減に覚えてるところもあるので。
No.4
- 回答日時:
VBSを最近使っているのですけれど、
うっかりやってしまうのがセミコロンです。
セミコロンつけるとエラーになるんですよ・・・無視してくれてもいいのに・・・
IF文やFor文は書き方が違うのですけど、
実は大昔BASICをかじったことがあるので、実はVBの書き方のほうがなじみがあったりします。
No.3
- 回答日時:
うーん、人それぞれだと思いますよ。
同時に学ぶと混乱するかもしれませんが、言語の違いが良く分かっていいかもしれません。今私はASP(ほとんどVB)の中にJavaScript(割とC++に似ている)を埋め込んでるんで、混乱しまくりです。
文末にセミコロン; を付けるの忘れたり、コメントに ' を使っちゃったりします。
No.2
- 回答日時:
一番の違いは、IF文ではないでしょうか?
例 aが1ならbに1を設定、それ以外ならばbに
0を設定
C言語
if(a == 1){
b=1;
}else{
b=0;
}
VB
if a = 1 then
b-1
else
b=0
endif
C言語では、
if(a = 1){
b=1;
}else{
b=0;
}
という記述もできますが、この場合、
『a=1』という代入の結果を評価して
しまうため、常に真になってしまい、
b=1となります。(文法エラーになり
ません。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 2物体の単振動 1 2023/08/17 20:27
- 物理学 高1力学の運動量の問題です。問題を一通り解いたのですが、行き詰まってしまったのでご回答頂ければ嬉しい 3 2022/06/29 11:20
- Visual Basic(VBA) VBでExcelの表形式の様なデザインを作りDBと連携させる。 4 2023/02/28 11:39
- 物理学 黄色マーカVbと書いてあるのですがVaの間違いですかね? また左の項ですと、積分範囲∫(r1→a)で 1 2023/06/21 15:29
- 工学 非対称三相交流について 2 2022/07/06 00:36
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Microsoft ASP ASP.NETや.NET、C#とかVBとか 2 2022/05/16 21:16
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- PHP C♯やPHPの仕事をしたいです。VB得意ですが、即戦力しか雇わないので無理です。どうしたらいいでしょ 3 2023/02/27 08:13
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数の動作説明
-
セグメントエラー
-
init関数の意味
-
DLL<->VB間での受け渡し(文字...
-
構造体とfscanf
-
printfとscanfの違いって・・・
-
1mWの緑レーザポインタで紙は、...
-
fopne で失敗する原因
-
基本アルゴリズムの『返す』の...
-
#include <stdio.h> #include <...
-
int型ポインタの加算
-
Go言語のプログラムについて
-
構造体のアドレス渡し
-
C言語グローバル変数
-
単方向リスト
-
c言語のポインタについて初心者...
-
VC++6.0 MFC ダイアログバーを...
-
ポインタを使うことのメリット...
-
ポインタ引数をさらにポインタ...
-
C言語のバグの警告文について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
C言語のポインタに直接アドレス...
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
C言語の関数と配列に関する質問
-
LPSTR型の初期化について
-
戻り値で構造体を返すことは可...
-
参照型で受け取った引数をポイ...
-
構造体とfscanf
-
ExcelVBAでのkernel32(64bit)
-
アプリを32bitから64bit移行
-
Cで作成したDLL関数をVBから呼...
-
C言語でのconstを返す関数
-
main(int argc,char **argv[])...
-
DLL<->VB間での受け渡し(文字...
-
エラーの意味
-
PASCALとFARの意味
-
ハンドルはポインタか
-
CWnd::EnableWindow()の扱い方
おすすめ情報