C言語なら俺に聞け 140 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 6f8c-8ulf)
垢版 |
2017/05/11(木) 22:20:03.99ID:cn414UR90
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://echo.2ch.net/test/read.cgi/tech/1487757355/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/05/12(金) 13:08:15.72ID://5I1UQ2M
イラネ
2017/05/12(金) 14:58:26.42ID:IiKpnLAId
C言語からVBAで作ったエクセルマクロって実行できないの?
4デフォルトの名無しさん (ワッチョイ cfa9-xHOS)
垢版 |
2017/05/12(金) 16:05:36.32ID:UWkhiPx90
C99からif,for,whileの後に続く括弧の中がブロックのなかという
認識になったらしいんですけど、for以外でどうやって
その中で変数を宣言できるというんですか?
だったらforだけブロックの中っていうことでいいんじゃないんですか?
5デフォルトの名無しさん (ワッチョイ c300-yCMP)
垢版 |
2017/05/12(金) 16:31:31.05ID:js7UY7om0
if ( char * p = malloc( N ) )
こういうのとか?
2017/05/12(金) 18:03:15.98ID:UWkhiPx90
それな
2017/05/12(金) 22:01:43.38ID:HEUwhpUy0
C言語でエクセルのVBAマクロの実行できないの?
2017/05/12(金) 22:06:16.73ID:r6F8dCD7d
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45361&;forum=7
2017/05/12(金) 22:08:09.17ID:HEUwhpUy0
C++かぁ
2017/05/12(金) 22:44:50.71ID:y9SJMwIK0
>>7
VBA マクロのインタプリター書けば良くね?Cで。
2017/05/12(金) 23:06:05.96ID:UkU1KlKv0
おいQZゴミコードをここで書くなよ
ウンコードに投稿しろよ
2017/05/12(金) 23:07:33.76ID:UkU1KlKv0
おいQZ
おまえってやればやるほど洗練された糞さを放ったコードが出来上がるから
自覚しとけ
2017/05/12(金) 23:09:00.10ID:UkU1KlKv0
おいQZいろんなC系スレでクソコードばらまくのやめろよ
今時Cでクソなコード書いてるのはおまえしかいない
2017/05/13(土) 12:44:34.80ID:vKP2EClq0
printf("%s", string);

ではなくて

printf(string);

でエラーが出ないようにするにはどうしたらいいですか?
2017/05/13(土) 13:06:30.63ID:7e4RDEpq0
#define printf(string) printf("%s", string)
とする
2017/05/13(土) 13:47:03.32ID:7pndE6Ym0
stringがchar*なら、それでエラーは出ない
キミが間違っとる
17デフォルトの名無しさん (ワッチョイ c300-yCMP)
垢版 |
2017/05/13(土) 14:03:34.24ID:u94khtn50
コンパイラーによってはセキュリティ警告でも出るんだろうな
2017/05/13(土) 14:12:40.14ID:m48zL+ZP0
>>16
print「f」なのにフォーマットしないってなんか気持ち悪いな
2017/05/13(土) 14:13:58.16ID:RjzTmCQE0
エラーがコンパイル時なのか実行時なのか
2017/05/13(土) 14:20:39.18ID:m48zL+ZP0
gcc使っているならコンパイル時のオプションに-wでコンパイルできたわ
2017/05/13(土) 14:51:14.61ID:7U8nUyJbM
>>18
printf("Hello, world!/n”);
気持ち悪いか?
2017/05/13(土) 14:58:27.01ID:Swj/Rgps0
>>21
馬鹿
2017/05/13(土) 15:42:18.61ID:zKUmpFvI0
string の中身に %s とか %d とかはいってると あわわわ
2017/05/13(土) 15:42:59.20ID:VT1sIlGJ0
ヌルポン渡すと落ちるぞ
2017/05/13(土) 15:55:06.50ID:1Sz8mIFNa
そもそも出ないだろw
2017/05/13(土) 22:21:45.16ID:IUtkDsju0
stringがワイド文字列なら警告くらい出るだろ
2017/05/13(土) 22:24:52.04ID:7pndE6Ym0
>>23
ああ、そう言う事なら、静的な引数チェクが不可能な文字列は警告だすのもありかも知れんな
実例は見た事ないが
2017/05/13(土) 23:37:01.87ID:Bvln+1PG0
format string attackって攻撃が実在するからな
C11で%nが廃止されたのも、それが原因だし
2017/05/14(日) 03:33:24.24ID:AUHwE8VO0
>>27
どのコンパイラもオプションつければ動的に決まる文字列は警告出すぞ
遅い上に危険で利点がない

%nが消えてもメモリ内を読まれるのは脆弱性
2017/05/14(日) 03:39:55.42ID:RBSPlVIO0
やりたいことって、putsではダメなのかな?
2017/05/14(日) 04:15:58.62ID:c1+aTdNX0
プッツ!
2017/05/14(日) 10:30:41.42ID:QnhMTTR+0
a+=1;

a++;
って同じ意味ですか?
2017/05/14(日) 10:51:06.70ID:44d8vf440
>>32
a+=1 と ++a の評価は同じ
a+=1 と a++ の評価は違う
評価後の値はどちらも同じ

#include <stdio.h>
int main(void)
{
int a;

a = 0;
printf("%d\n", a); // a=0
printf("%d\n", a += 1); // a=1 評価結果はインクリメント後の値
printf("%d\n\n", a); //a=1

a = 0;
printf("%d\n", a); // a=0
printf("%d\n", ++a); // a=1 評価結果はインクリメント後の値
printf("%d\n\n", a); // a=1

a = 0;
printf("%d\n", a); // a=0
printf("%d\n", a++); // a=0 評価結果はインクリメント前の値
printf("%d\n\n", a); // a=1

return 0;
}
34デフォルトの名無しさん (ワッチョイ 8ff3-SU9n)
垢版 |
2017/05/15(月) 10:50:08.41ID:ITGYMTaF0
int a=1;
a = a+++a;

これ、たいていの環境で 3 になるみたいだけど
内部ではどっちに構文解析されてるの?
2017/05/15(月) 11:49:32.39ID:8jcxUI920
>>34
a=b++ + c;
2017/05/15(月) 11:56:31.63ID:Z3hdp57V0
>>34
後置インクリメント演算子(a++)は+演算子や前置インクリメント演算子(++a)より優先順位高い
2017/05/15(月) 12:12:51.85ID:Vosr5hkL0
>>34
VC++の場合
a = (a + a)++;

GCCの場合
a = ++(a + a);

int a = 10;
printf("%d\n", a); // a=10
printf("%d\n", a=a+++a); // a=20 (VC++の場合)、a=21 (GCCの場合)
printf("%d\n\n", a); // a=21
2017/05/15(月) 12:55:00.64ID:FMK+ZQcW0
右辺値のインクリメントが出鱈目過ぎる
2017/05/15(月) 13:04:41.31ID:m4iBjxKl0
>>36
演算子の優先順位と構文解析は関係ねーよ

前方から最長になるように字句解釈するから、 a=a+++aは、a = a ++ + aになる
2017/05/15(月) 13:26:43.15ID:Z3hdp57V0
>>39
えっ? 関係ないの?
41デフォルトの名無しさん (ワッチョイ 7fcd-/tbB)
垢版 |
2017/05/15(月) 14:05:11.81ID:KBSLJwGw0
>>37
// GCCの場合
a=10;
printf("1: %d\n", a = a++ + a); // a=21
a=10;
printf("2: %d\n", a = ++a + a); // a=22
a=10;
printf("3: %d\n", a = a + a++); // a=21
a=10;
printf("4: %d\n", a = a + ++a); // a=22

1と2は予想通りだけど3と4は予想が外れた。
GCCは素直に前方から評価すると思っていたが、
インクリメント演算がある項を先に評価するようだ。
2017/05/15(月) 14:08:51.26ID:ITGYMTaF0
>>39
なるほど先頭から最長一致か ありがとう

a = a+++a; // 21
a = a+ ++a; // 22
a = a++ +a; // 21

gccだとこんな感じになったわ
2017/05/15(月) 14:28:56.88ID:m4iBjxKl0
>>40
関係ない

演算子の優先順位はトークンが確定した後の話
構文解釈とは一切関係ない
2017/05/15(月) 14:50:03.73ID:k1YI7zCW0
知ったかぶりしないで
副作用完了点を検索してからレスしようね
2017/05/15(月) 15:08:26.82ID:m4iBjxKl0
さすがに、a=a+++a が未定義なことぐらいわかってるだろ
そのうえで、どう動作してるのだろうかって話じゃねーの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況